Maison >Java >javaDidacticiel >Pourquoi la modification d'un caractère dans une boucle Java For-Each ne modifie-t-elle pas le tableau d'origine ?

Pourquoi la modification d'un caractère dans une boucle Java For-Each ne modifie-t-elle pas le tableau d'origine ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-21 11:54:14882parcourir

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

Plonger dans le dilemme de l'itération : pourquoi les affectations de boucles Foreach ne modifient pas les données sous-jacentes

Malgré l'attrait intuitif de la modification directe des éléments dans un boucle foreach, comme le montre cet extrait Java :

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"

le code est surprenant donne du "boss" au lieu de la "basse" attendue.

Dévoilement de la copie

La clé pour comprendre ce paradoxe réside dans la nature de la variable d'itération "c. " Contrairement à la croyance populaire, « c » représente une simple copie de l’élément du tableau disponible. La modification de "c" n'a aucune incidence sur le contenu original du tableau.

Modification du tableau démystifiée

Pour véritablement modifier le tableau, une intervention explicite est nécessaire :

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

Ici, le code accède et modifie les éléments réels du tableau, ce qui entraîne la mise à jour du tableau pour refléter les éléments souhaités. changements.

Comprendre l'interprétation JLS

La spécification du langage Java (JLS) interprète le code original comme équivalent à :

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

Cette décomposition met l'accent que "c" est simplement une copie qui ne peut pas influencer le tableau.

Essentiellement, les boucles foreach fournissent un des moyens de parcourir les collections sans interférer avec leur structure sous-jacente. La modification directe du tableau nécessite de travailler explicitement avec l'index et les éléments du tableau.

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