Rumah >Java >javaTutorial >Mengapa Tidak Mengubah Suai Aksara dalam Java Untuk-Setiap Gelung Mengubah Tatasusunan Asal?
Menyelami Dilema Lelaran: Mengapa Tugasan Gelung Foreach Tidak Mengubah Data Dasar
Walaupun tarikan intuitif unsur-unsur yang mengubah suai secara langsung dalam foreach gelung, seperti yang dilihat dalam Java ini coretan:
String boss = "boss"; char[] array = boss.toCharArray(); for(char c : array) { if (c== 'o') c = 'a'; } System.out.println(new String(array)); //Unexpected result: "boss"
kod secara mengejutkan menghasilkan "bos" dan bukannya "bass" yang dijangkakan.
Membuka Salinan
Kunci untuk memahami paradoks ini terletak pada sifat pembolehubah lelaran "c." Bertentangan dengan kepercayaan popular, "c" mewakili salinan semata-mata elemen tatasusunan yang ada. Mengubah suai "c" tidak mempunyai kaitan dengan kandungan tatasusunan asal.
Pengubahsuaian Tatasusunan Dinyahmistifikasi
Untuk mengubah tatasusunan dengan sebenar-benarnya, campur tangan eksplisit diperlukan:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
Di sini, kod mengakses dan mengubah suai elemen tatasusunan sebenar, menyebabkan tatasusunan dikemas kini untuk mencerminkan perubahan yang diingini.
Memahami Tafsiran JLS
Spesifikasi Bahasa Java (JLS) mentafsir kod asal sebagai bersamaan dengan:
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
Ini penguraian menekankan bahawa "c" hanyalah salinan yang tidak boleh mempengaruhi tatasusunan.
Pada dasarnya, setiap gelung menyediakan cara yang diperkemas untuk mengulang koleksi tanpa mengganggu struktur asasnya. Pengubahsuaian tatasusunan langsung memerlukan kerja secara eksplisit dengan indeks dan elemen tatasusunan.
Atas ialah kandungan terperinci Mengapa Tidak Mengubah Suai Aksara dalam Java Untuk-Setiap Gelung Mengubah Tatasusunan Asal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!