Rätselhafte Zuweisung in Foreach-Schleifen: Warum sie sich nicht auf zugrunde liegende Daten auswirkt
Bedenken Sie den verwirrenden Codeausschnitt unten:
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"?
Trotz der scheinbaren Zuweisung zur Iterationsvariablen c bleibt die Ausgabe bestehen „Boss“ anstelle des erwarteten „Bass“. Um dieses Rätsel zu lösen, tauchen wir in die Nuancen der foreach-Schleife ein.
Iterationsvariable: Ein bloßer Proxy
Beim Durchlaufen einer Sammlung mithilfe einer foreach-Schleife wird die Die Iterationsvariable (in diesem Fall c) stellt lediglich eine Kopie der Elemente dar. Im Wesentlichen fungiert es als temporärer Platzhalter beim Zugriff auf die zugrunde liegende Sammlung.
Ändern des Platzhalters vs. Ändern der Sammlung
Zuweisungen an die Iterationsvariable wirken sich nur auf die Kopie aus und nicht die Originalsammlung. Dies entspricht:
for (int i = 0; i < array.length; i++) { char c = array[i]; if (c == 'o') { c = 'a'; } }
Während der Wert von c lokal geändert wird, bleibt das ursprüngliche Array unverändert.
Imperative Änderung für echte Änderung
Um die zugrunde liegende Sammlung wirklich zu ändern, ist ein direkter Zugriff auf die Array-Elemente erforderlich:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
Dieser Code ändert die Person explizit Elemente des Arrays, was zur gewünschten „Bass“-Ausgabe führt.
Fazit
Das Verständnis der wahren Natur der Iterationsvariablen in foreach-Schleifen ist entscheidend, um Verwirrung zu vermeiden und Gewährleistung einer effektiven Datenmanipulation. Durch Zuweisungen zu den Array-Elementen anstelle der Iterationsvariablen können Entwickler die zugrunde liegenden Sammlungen sicher entsprechend ihren beabsichtigten Anforderungen ändern.
Das obige ist der detaillierte Inhalt vonWarum ändert das Ändern der Iterationsvariablen einer Foreach-Schleife nicht das zugrunde liegende Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!