¿Cómo funciona realmente el ciclo for-each en Java? Explicación detallada con ejemplos
¡Hola a todos! Empecé a estudiar Java recientemente y me encontré con el ciclo for-each. Parece todo claro: for (int x : numbers) { ... } — simplemente itera sobre los elementos de un array o colección. Pero cuando empecé a profundizar, surgieron muchas preguntas.
Por ejemplo, escribí este código:
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!
}
}
Y obtuve ConcurrentModificationException. ¿Por qué? En un for normal (for (int i = 0; i < list.size(); i++)) esto no ocurre.
Otro ejemplo: intenté modificar los elementos de un array con for-each:
int[] arr = {1, 2, 3};
for (int x : arr) {
x = x * 2; // ¡No funciona! El array no cambió
}
¿Por qué x no referencia al elemento del array? ¿Y qué sucede realmente "bajo el capó"? ¿Puede for-each trabajar con cualquier tipo de dato? ¿Cómo el compilador...