¿Cómo funciona el bucle Java "for each"?

Considera:

List<String> someList = new ArrayList<String>();
// add "monkey", "donkey", "skeleton key" to someList

..;

for (String item : someList) {
    System.out.println(item);
}

¿Cómo sería el bucle for equivalente sin utilizar la sintaxis for each?

Solución
for (Iterator i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

Ten en cuenta que si necesitas usar i.remove(); en tu bucle, o acceder al iterador real de alguna manera, no puedes usar el modismo for ( : ), ya que el iterador real es simplemente inferido.

Como señaló Denis Bueno, este código funciona para cualquier objeto que implemente la interfaz Iterable.

Además, si el lado derecho del modismo for (:) es un array en lugar de un objeto Iterable, el código interno utiliza un contador de índice int y comprueba contra array.length en su lugar. Véase la Especificación del Lenguaje Java.

Comentarios (4)

El bucle for-each en Java utiliza el mecanismo subyacente de los iteradores. Así que es idéntico a lo siguiente:

Iterator iterator = someList.iterator();

while (iterator.hasNext()) {
  String item = iterator.next();
  System.out.println(item);
}
Comentarios (0)

He aquí una expresión equivalente.

for(Iterator sit = someList.iterator(); sit.hasNext(); ) {
    System.out.println(sit.next());
}
Comentarios (0)