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
Linda Hamiltonasal
2024-12-18 20:25:18940semak imbas

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"

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';
    }
}

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:
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