Warum die Zuweisung der Iterationsvariablen fehlschlägt
In der foreach-Schleife von Java ist es ein weit verbreitetes Missverständnis, dass die Zuweisung an die Iterationsvariable die zugrunde liegenden Daten ändert. Betrachten Sie den folgenden Code:
String boss = "boss"; char[] array = boss.toCharArray(); for (char c : array) { if (c == 'o') { c = 'a'; } } System.out.println(new String(array)); // Prints "boss", not "bass"
Unerwarteterweise bleibt die Ausgabe trotz der offensichtlichen Änderung von „o“ in „a“ in der Schleife „boss“. Dieses Verhalten ergibt sich aus der Natur von foreach-Schleifen.
Bei Verwendung von foreach ist die Iterationsvariable eine Kopie des Array-Elements. Durch die Zuweisung zur Iterationsvariablen wird nur die Kopie geändert, nicht das Array-Element selbst. Um das zugrunde liegende Array zu aktualisieren, sind explizite Änderungen erforderlich:
for (int i = 0; i < array.length; i++) { if (array[i] == 'o') { array[i] = 'a'; } }
Dieser überarbeitete Code weist den tatsächlichen Array-Elementen zu und stellt so die beabsichtigte Änderung von „o“ zu „a“ sicher.
In Zusammenfassend lässt sich sagen, dass foreach-Schleifen die Iteration über Sammlungen erleichtern, Zuweisungen an die Iterationsvariable wirken sich jedoch nur auf die lokale Kopie aus. Für dauerhafte Änderungen ist eine explizite Array-Indizierung erforderlich.
Das obige ist der detaillierte Inhalt vonWarum ändert die Zuweisung zur Iterationsvariablen nicht das ursprüngliche Array in einer Java-For-Each-Schleife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!