Rumah > Java > javaTutorial > Mengapa Tidak Mengubah Suai Pembolehubah Lelaran Untuk-Setiap Gelung Mengubah Tatasusunan Dasar dalam Java?

Mengapa Tidak Mengubah Suai Pembolehubah Lelaran Untuk-Setiap Gelung Mengubah Tatasusunan Dasar dalam Java?

Linda Hamilton
Lepaskan: 2024-12-18 20:25:18
asal
1017 orang telah melayarinya

Why Doesn't Modifying a For-Each Loop's Iteration Variable Change the Underlying Array in Java?

Mengapa Mengubah Suai Pembolehubah Lelaran dalam Satu Gelung Untuk-Setiap Tidak Mengubah Data Dasar

Di Java, gelung yang dipertingkatkan untuk setiap ialah sintaks yang mudah untuk mengulang tatasusunan atau koleksi. Walau bagaimanapun, salah tanggapan biasa timbul apabila cuba mengubah suai data asas dalam gelung.

Pertimbangkan coretan kod berikut:

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

for(char c : array)
{
 if (c== 'o')
     c = 'a'; 
}
System.out.println(new String(array)); //Outputs "boss"
Salin selepas log masuk

Walaupun blok if-else cuba menggantikan semua kejadian 'o' dengan 'a', hasilnya kekal sebagai "bos". Mengapakah ini berlaku?

Kunci untuk memahami tingkah laku ini terletak pada sifat pembolehubah lelaran dalam satu gelung untuk setiap. Apabila melelaran pada tatasusunan menggunakan sintaks untuk-setiap, pembolehubah lelaran (c dalam kes ini) hanyalah salinan elemen tatasusunan pada indeks semasa. Sebarang perubahan yang dibuat pada pembolehubah lelaran tidak merambat kembali ke tatasusunan asal.

Untuk mengubah suai data asas, anda perlu mengakses dan mengubah suai elemen tatasusunan itu sendiri secara eksplisit. Ini boleh dicapai menggunakan standard untuk sintaks gelung:

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

Dalam kod yang disemak ini, pembolehubah lelaran i menjejaki indeks semasa dalam tatasusunan, manakala tatasusunan[i] mengakses elemen sebenar pada masa itu indeks. Menetapkan kepada tatasusunan[i] secara langsung akan mengubah suai kandungan tatasusunan.

Oleh itu, apabila bekerja dengan tatasusunan atau koleksi menggunakan sintaks untuk setiap gelung, adalah penting untuk diingat bahawa mengubah suai pembolehubah lelaran sahaja tidak mengubah data asas. Untuk membuat perubahan kekal pada data, adalah perlu untuk mengakses dan mengubah suai elemen secara eksplisit dalam koleksi menggunakan sintaks gelung standard atau kaedah lain yang sesuai.

Atas ialah kandungan terperinci Mengapa Tidak Mengubah Suai Pembolehubah Lelaran Untuk-Setiap Gelung Mengubah Tatasusunan Dasar dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan