Heim >Java >javaLernprogramm >Warum ändert das Ändern der Iterationsvariablen einer Foreach-Schleife nicht das zugrunde liegende Array?

Warum ändert das Ändern der Iterationsvariablen einer Foreach-Schleife nicht das zugrunde liegende Array?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-20 13:06:16560Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn