Rumah >Java >javaTutorial >Mengapa Tidak Mengubah Suai Aksara dalam Java Untuk-Setiap Gelung Mengubah Tatasusunan Asal?

Mengapa Tidak Mengubah Suai Aksara dalam Java Untuk-Setiap Gelung Mengubah Tatasusunan Asal?

Susan Sarandon
Susan Sarandonasal
2024-12-21 11:54:14838semak imbas

Why Doesn't Modifying a Character in a Java For-Each Loop Change the Original Array?

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!

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