Maison > Java > javaDidacticiel > Pourquoi la modification de la variable d'itération d'une boucle Foreach ne modifie-t-elle pas le tableau sous-jacent ?

Pourquoi la modification de la variable d'itération d'une boucle Foreach ne modifie-t-elle pas le tableau sous-jacent ?

Patricia Arquette
Libérer: 2024-12-20 13:06:16
original
567 Les gens l'ont consulté

Why Doesn't Modifying a Foreach Loop's Iteration Variable Change the Underlying Array?

Assignation énigmatique dans les boucles Foreach : pourquoi cela n'affecte pas les données sous-jacentes

Considérez l'extrait de code déroutant ci-dessous :

String boss = "boss";
char[] array = boss.toCharArray();

for(char c : array) {
    if (c== 'o')
        c = 'a';
}
System.out.println(new String(array)); //Why does this print "boss" and not "bass"?
Copier après la connexion

Malgré l'affectation apparente à la variable d'itération c, la sortie reste "boss" au lieu de la "basse" attendue. Pour percer ce mystère, nous approfondissons les nuances de la boucle foreach.

Variable d'itération : un simple proxy

Lors de l'itération sur une collection à l'aide d'une boucle foreach, la La variable d'itération (dans ce cas, c) représente simplement une copie des éléments. Essentiellement, il agit comme un espace réservé temporaire lors de l'accès à la collection sous-jacente.

Modification de l'espace réservé ou modification de la collection

Les affectations effectuées à la variable d'itération n'affectent que la copie. et non la collection originale. Cela équivaut à :

for (int i = 0; i < array.length; i++) {
    char c = array[i];
    if (c == 'o') {
        c = 'a';
    }
}
Copier après la connexion

Tandis que la valeur de c est modifiée localement, le tableau d'origine reste inchangé.

Modification impérative pour un changement réel

Pour véritablement modifier la collection sous-jacente, un accès direct aux éléments du tableau est nécessaire :

for (int i = 0; i < array.length; i++) {
    if (array[i] == 'o') {
        array[i] = 'a';
    }
}
Copier après la connexion

Ce code modifie explicitement l'individu éléments du tableau, résultant en la sortie "basse" souhaitée.

Conclusion

Comprendre la vraie nature de la variable d'itération dans les boucles foreach est crucial pour éviter toute confusion et assurer une manipulation efficace des données. En effectuant des affectations aux éléments du tableau au lieu de la variable d'itération, les développeurs peuvent modifier en toute confiance les collections sous-jacentes en fonction de leurs exigences.

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