Mengapa Tugasan Pembolehubah Lelaran Gagal
Dalam gelung foreach Java, salah tanggapan lazim bahawa memberikan pembolehubah lelaran mengubah suai data asas. Pertimbangkan kod berikut:
String boss = "boss"; char[] array = boss.toCharArray(); for (char c : array) { if (c == 'o') { c = 'a'; } } System.out.println(new String(array)); // Prints "boss", not "bass"
Tanpa diduga, output kekal sebagai "bos" walaupun terdapat perubahan ketara 'o' kepada 'a' dalam gelung. Tingkah laku ini berpunca daripada sifat gelung foreach.
Apabila menggunakan foreach, pembolehubah lelaran ialah salinan elemen tatasusunan. Menetapkan kepada pembolehubah lelaran hanya mengubah suai salinan, bukan elemen tatasusunan itu sendiri. Untuk mengemas kini tatasusunan asas, pengubahsuaian eksplisit diperlukan:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
Kod yang disemak ini diberikan kepada elemen tatasusunan sebenar, memastikan pengubahsuaian 'o' kepada 'a' yang dimaksudkan.
Dalam ringkasan, foreach gelung memberikan kemudahan untuk lelaran ke atas koleksi, tetapi tugasan kepada pembolehubah lelaran hanya mempengaruhi salinan tempatan. Untuk pengubahsuaian berterusan, pengindeksan tatasusunan eksplisit diperlukan.
Atas ialah kandungan terperinci Mengapa Menetapkan Pembolehubah Lelaran Tidak Mengubah Tatasusunan Asal dalam Java Untuk-Setiap Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!