Heim >Java >javaLernprogramm >Warum ändert das Ändern eines Zeichens in einer Java-For-Each-Schleife nicht das ursprüngliche Array?

Warum ändert das Ändern eines Zeichens in einer Java-For-Each-Schleife nicht das ursprüngliche Array?

Susan Sarandon
Susan SarandonOriginal
2024-12-21 11:54:14844Durchsuche

Why Doesn't Modifying a Character in a Java For-Each Loop Change the Original Array?

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!

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