2010-05-22 12 views
10

¿Alguno cualquier explique esta instrucción para mí: para (;;)Java: ¿Qué es "para (;;)"

que he encontrado varios tipos de estos marca (al igual que en el código de Facebook y ajax en materia concurrente de Java).

+3

#define EVER ;; para (SIEMPRE) // ... – Andrew

Respuesta

23

Un bucle infinito.

Cada una de las tres partes de un bucle for (for(x; y; z)) es opcional.

Así que usted puede hacer esto:

int i = 0; 
for (; i < 20; ++i) 

y es perfectamente válido, o

for (int i = 0; i < 20;) { ++i; } 

o

for (int i = 0; ; ++i) { if (i < 20) { break; } } 

y todas son válidas.

También puede omitir las tres partes, con for(;;). Entonces usted tiene un bucle que:

  • hace ninguna inicialización (la primera parte)
  • no tiene ninguna condición para parar (la parte media)
  • no hace nada después de cada iteración (la última parte)

por lo que básicamente un bucle sin fin. Simplemente hace lo que dice en el cuerpo del bucle, una y otra vez

+0

consulte la especificación del lenguaje Java §14.14.1.2 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.1.2 como referencia: "Si el _expresión_ no está presente, o se está presente y el valor resultante de la evaluación (incluyendo cualquier posible unboxing) es 'true', entonces el contenido * * Declaración se ejecuta." –

+9

Esta respuesta demuestra más o menos la grandeza de la 'política ninguna pregunta es demasiado simple'. :) –

6

Es un bucle sin fin. Para la especificación de la declaración for, vea here.

5

Eso es un bucle infinito, similar a

while(true) 
{ 
    ... 
} 
2

Su un bucle infinito, ya que la condición de salida (inexistente) nunca será falsa.

Cualquier bucle sin una condición de salida será infinito:

for (int x=0; ; x++) { } 

Exactamente lo mismo que while (true), aunque mi humilde opinión un poco menos legible.

2

De hecho, es un bucle infinito. Pero en Java, realmente debería preferir while (true) sobre for (;;), ya que es más legible (que probablemente ya sepa). El compilador lo optimizará de todos modos. En JavaScript no hay forma de compilar y cada byte en los conteos de HTTP, esa es la razón por la que se prefiere for (;;). Guarda algunos caracteres (bytes).

+0

1 para facilitar la lectura del 'while (true)' ' – whiskeysierra

+0

encuentro para (;;)' para ser más legible. – jalf

2

La sintaxis de un bucle for es

for (init-stmt; condition; next-stmt) { 

} 

Por lo tanto, es simplemente un bucle sin declaración inicial, próximo estado o condición. La ausencia de la condición de salida lo hace infinito.