Maison >Java >javaDidacticiel >Pourquoi l'affectation à la variable d'itération ne modifie-t-elle pas le tableau d'origine dans une boucle Java For-Each ?

Pourquoi l'affectation à la variable d'itération ne modifie-t-elle pas le tableau d'origine dans une boucle Java For-Each ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-29 08:59:10978parcourir

Why Doesn't Assigning to the Iteration Variable Change the Original Array in a Java For-Each Loop?

Pourquoi l'affectation de la variable d'itération échoue

Dans la boucle foreach de Java, c'est une idée fausse courante selon laquelle l'affectation à la variable d'itération modifie les données sous-jacentes. Considérez le code suivant :

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"

De façon inattendue, la sortie reste "boss" malgré le changement apparent de "o" en "a" dans la boucle. Ce comportement découle de la nature des boucles foreach.

Lors de l'utilisation de foreach, la variable d'itération est une copie de l'élément du tableau. L'affectation à la variable d'itération ne modifie que la copie, pas l'élément du tableau lui-même. Pour mettre à jour le tableau sous-jacent, des modifications explicites sont nécessaires :

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

Ce code révisé attribue aux éléments réels du tableau, garantissant la modification prévue de 'o' en 'a'.

Dans En résumé, les boucles foreach facilitent l'itération sur les collections, mais les affectations à la variable d'itération n'affectent que la copie locale. Pour les modifications persistantes, une indexation explicite du tableau est requise.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn