2011-12-25 10 views
5

Veamos el siguiente loop do-while. Es bastante obvio y no hay dudas al respecto.bucles do-while con continue y con y sin etiqueta en Java

do 
{ 
    System.out.println("Hello world"); 
    break; 
} while(false); 

Es bastante obvio y sólo muestra la secuencia del mundo Hola en la consola y salidas.


Ahora, la siguiente versión de do-while parece estar atrapado en un bucle infinito, pero no lo hace. También muestra la cadena Hola mundo en la consola y sale silenciosamente.

do 
{ 
    System.out.println("Hello world"); 
    continue; 
} while(false); 

Vamos a ver otra versión de do-while con una etiqueta de la siguiente manera.

label:do 
{ 
    System.out.println("Hello world"); 
    continue label; 
} while(false); 

Es también muestra el mensaje Hola mundo en la consola y salidas. No es un ciclo infinito, ya que puede significar que todas las versiones en este escenario funcionan de la misma manera. ¿Cómo?

Respuesta

9

La declaración continue significa "continuar con la lógica de control de bucle para la próxima iteración". No significa comenzar la iteración del siguiente ciclo incondicionalmente.

(Si alguien quiere referirse al JLS en esto, la sección relevante es JLS 14.16. Sin embargo, esta parte de la especificación es un poco complicada, y depende de las especificaciones de otras construcciones, por ejemplo, las diferentes declaraciones de bucle y prueba/catch/finally)

+0

Hm, esto quizás más claramente redactada que mi respuesta. –

4

Al igual que con un bucle for, la while condicional en una do-while es siempre comprobado antes de entrar en el cuerpo del bucle (después de la primera pasada a través de, por supuesto). Y, al igual que con un bucle for, continue nunca hace que se omita la expresión de terminación.

3

el continúan está comprobando la expresión booleana antes de que realmente continua, ya que el manual dice:.

la sentencia continue se salta la iteración actual de un for, while o do-while lazo. La forma sin etiqueta salta al final del cuerpo del bucle más interno y evalúa la expresión booleana que controla el bucle.

Para más detalles echar un vistazo a: branching semantics

Cuestiones relacionadas