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"?
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'; } }
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'; } }
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!