Eintauchen in das Iterationsdilemma: Warum Foreach-Schleifenzuweisungen die zugrunde liegenden Daten nicht verändern
Trotz der intuitiven Anziehungskraft der direkten Änderung von Elementen innerhalb einer foreach-Schleife, wie in diesem Java-Snippet zu sehen ist:
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"
der Code überraschend ergibt „Boss“ anstelle des erwarteten „Bass“.
Enthüllung der Kopie
Der Schlüssel zum Verständnis dieses Paradoxons liegt in der Natur der Iterationsvariablen „c. " Entgegen der landläufigen Meinung stellt „c“ lediglich eine Kopie des jeweiligen Array-Elements dar. Das Ändern von „c“ hat keinen Einfluss auf den ursprünglichen Array-Inhalt.
Array-Änderung entmystifiziert
Um das Array wirklich zu ändern, ist ein expliziter Eingriff erforderlich:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
Hier greift der Code auf die tatsächlichen Array-Elemente zu und ändert sie, was dazu führt, dass das Array aktualisiert wird, um das Gewünschte widerzuspiegeln Änderungen.
JLS-Interpretation verstehen
Die Java Language Specification (JLS) interpretiert den Originalcode als äquivalent zu:
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
Diese Zerlegung betont dass „c“ lediglich eine Kopie ist, die keinen Einfluss auf das Array hat.
Im Wesentlichen stellen foreach-Schleifen ein optimiertes Mittel dar der Iteration über Sammlungen, ohne deren zugrunde liegende Struktur zu beeinträchtigen. Die direkte Array-Änderung erfordert die explizite Arbeit mit dem Array-Index und den Elementen.
Das obige ist der detaillierte Inhalt vonWarum ändert das Ändern eines Zeichens in einer Java-For-Each-Schleife nicht das ursprüngliche Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!