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
Libérer: 2024-12-21 11:54:14
original
837 Les gens l'ont consulté

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"
Copier après la connexion

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';
    }
}
Copier après la connexion

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'; 
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal