2011-10-07 15 views
5

Digamos que tengo el siguiente código:¿La "condición" de un ciclo for se llama cada vez para Iterables?

for (Object obj : Node.getIterable()) { 
    //Do something to object here 
} 

y Node.getIterable() devuelve un iterable. ¿Se llama a la función getIterable() cada vez o solo cuando se inicia el ciclo for? ¿Debería cambiarlo a:

Iterable<Object> iterable = new Iterable<Object>(); 
//populate iterable with objects 
for (Object obj : iterable) { 
    //Do something 
} 
+4

Forma sencilla de averiguarlo ... Simplemente ajuste el Node.getIterable en un método que también escriba algo en la consola (o en un archivo, si lo prefiere). Entonces podrás ver cuántas veces se llamó. Mi apuesta, solo se llama una vez, pero no tengo suficiente confianza para dar una respuesta definitiva. –

Respuesta

3

No, no es así. Mantiene el elemento iterable que recibe del getIterable() en memoria y utiliza esa referencia. La forma más rápida de verificar es poner un punto de corte en la instrucción for y depurar el camino hacia el JDK. Tú vendrás a saber.

Cuestiones relacionadas