Rumah >Java >javaTutorial >Mengapa Pengubahsuaian Pembolehubah Lelaran Gelung Foreach Tidak Mengubah Tatasusunan Pendasar?

Mengapa Pengubahsuaian Pembolehubah Lelaran Gelung Foreach Tidak Mengubah Tatasusunan Pendasar?

Patricia Arquette
Patricia Arquetteasal
2024-12-20 13:06:16564semak imbas

Why Doesn't Modifying a Foreach Loop's Iteration Variable Change the Underlying Array?

Tugasan Enigmatic dalam Foreach Gelung: Mengapa Ia Tidak Mempengaruhi Data Dasar

Pertimbangkan coretan kod yang membingungkan di bawah:

String boss = "boss";
char[] array = boss.toCharArray();

for(char c : array) {
    if (c== 'o')
        c = 'a';
}
System.out.println(new String(array)); //Why does this print "boss" and not "bass"?

Walaupun terdapat penugasan kepada pembolehubah lelaran c, output kekal "bos" dan bukannya "bass" yang dijangkakan. Untuk merungkai misteri ini, kami menyelidiki nuansa gelung foreach.

Pembolehubah Lelaran: Proksi Semata-mata

Apabila mengulang koleksi menggunakan gelung foreach, pembolehubah lelaran (dalam kes ini, c) hanya mewakili salinan elemen. Pada asasnya, ia bertindak sebagai pemegang tempat sementara semasa mengakses koleksi asas.

Mengubah suai Pemegang Tempat lwn. Menukar Koleksi

Tugasan yang dibuat kepada pembolehubah lelaran hanya mempengaruhi salinan dan bukan koleksi asal. Ini bersamaan dengan:

for (int i = 0; i < array.length; i++) {
    char c = array[i];
    if (c == 'o') {
        c = 'a';
    }
}

Walaupun nilai c diubah suai setempat, tatasusunan asal kekal tidak berubah.

Pengubahsuaian Penting untuk Perubahan Sebenar

Untuk mengubah suai koleksi asas, akses terus kepada elemen tatasusunan adalah perlu:

for (int i = 0; i < array.length; i++) {
    if (array[i] == 'o') {
        array[i] = 'a';
    }
}

Kod ini secara eksplisit mengubah elemen individu tatasusunan, menghasilkan output "bass" yang dikehendaki.

Kesimpulan

Memahami sifat sebenar pembolehubah lelaran dalam setiap gelung adalah penting untuk mengelakkan kekeliruan dan memastikan manipulasi data yang berkesan. Dengan membuat penetapan kepada elemen tatasusunan dan bukannya pembolehubah lelaran, pembangun boleh mengubah suai koleksi asas dengan yakin mengikut keperluan yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Pengubahsuaian Pembolehubah Lelaran Gelung Foreach Tidak Mengubah Tatasusunan Pendasar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn