Avatar ·

Wie funktioniert die for-each-Schleife in Java wirklich? Detaillierte Erklärung mit Beispielen

Hallo zusammen! Ich habe vor kurzem angefangen, Java zu lernen, und bin auf die for-each-Schleife gestoßen. Es scheint alles klar zu sein: for (int x : numbers) { ... } — durchläuft einfach die Elemente eines Arrays oder einer Collection. Aber als ich tiefer grub, kamen viele Fragen auf. Zum Beispiel habe ich diesen Code geschrieben:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

for (String s : list) {
    if (s.equals("B")) {
        list.remove(s); // ConcurrentModificationException!
    }
}
Und bekam eine ConcurrentModificationException. Warum? In einer normalen for-Schleife (for (int i = 0; i < list.size(); i++)) passiert das nicht. Ein weiteres Beispiel — ich versuchte, Array-Elemente mit for-each zu ändern:
int[] arr = {1, 2, 3};
for (int x : arr) {
    x = x * 2; // Funktioniert nicht! Das Array hat sich nicht geändert
}
Warum verweist x nicht auf das Array-Element? Und was passiert eigentlich "unter der Haube"? Kann for-each mit beliebigen Datentypen arbeiten? Wie der Compiler