2010-05-22 19 views
10

Sarebbe uno spiegare questa istruzione per me: for (;;)Java: Che cosa è "for (;;)"

ho incontrato diversi tipi di questi contrassegno (come nel codice Ajax di facebook e in roba concomitante di Java).

+3

#define MAI ;; per (EVER) // ... – Andrew

risposta

23

Un ciclo infinito.

Ciascuna delle tre parti di un ciclo for (for(x; y; z)) è facoltativa.

Così si può fare questo:

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

ed è perfettamente valido, o

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

o

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

e sono tutti validi.

È inoltre possibile omettere tutte e tre le parti, con for(;;). Allora avete un ciclo che:

  • non fa di inizializzazione (la prima parte)
  • ha nessuna condizione per l'arresto (la parte centrale)
  • non fa nulla dopo ogni iterazione (l'ultima parte)

quindi praticamente un loop infinito. Fa semplicemente quello che dice nel corpo del loop, ancora e ancora

+0

Vedere la Specifica della lingua Java §14.14.1.2 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.1.2 per riferimento: "Se _Expression_ non è presente, oppure è presente e il valore risultante dalla sua valutazione (incluso qualsiasi possibile disimballaggio) è 'true', quindi viene eseguita l'istruzione * contenuta *." –

+9

Questa risposta dimostra in modo evidente la grandezza della politica "Nessuna domanda è troppo semplice". :) –

6

È un ciclo infinito. Per la definizione dell'istruzione for, vedere here.

5

Questo è un ciclo infinito, simile a

while(true) 
{ 
    ... 
} 
2

sua un ciclo infinito, visto che la (inesistente) condizione di uscita non sarà mai falso.

Qualunque ciclo senza una condizione di uscita saranno infinita:

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

Esattamente come while (true), anche se IMHO un po 'meno leggibile.

2

Questo è davvero un ciclo infinito. Ma in Java dovresti davvero preferire while (true) su for (;;) poiché è più leggibile (cosa che probabilmente già comprendi). Il compilatore lo ottimizzerà comunque. In JavaScript non c'è alcun mezzo per un compilatore e ogni byte su HTTP conta, questo è il motivo per cui è preferito for (;;). Salva alcuni caratteri (byte).

+0

+1 per la leggibilità di 'while (true)' – whiskeysierra

+0

Trovo 'for (;;)' per essere più leggibile. – jalf

2

La sintassi per un ciclo for è

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

} 

quindi è semplicemente un ciclo for con alcuna dichiarazione iniziale, successiva dichiarazione o condizione. L'assenza della condizione di uscita lo rende infinito.