2010-05-22 14 views
10

Würde jemand bitte diese Anweisung für mich erklären: for (;;)Java: Was ist "for (;;)"

Ich habe mehrere Arten dieser Marke auftreten (wie in Ajax-Code von Facebook und in gleichzeitigen Sachen von Java).

+3

#define EVER ;; für (EVER) // ... – Andrew

Antwort

23

Eine Endlosschleife.

Jeder der drei Teile einer for-Schleife (for(x; y; z)) ist optional.

So können Sie dies tun:

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

und es ist vollkommen richtig, oder

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

oder

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

und sie sind alle gültig.

Sie können auch alle drei Teile mit for(;;) auslassen. Dann haben Sie eine Schleife, dass:

  • hat keine Initialisierung (der erste Teil)
  • hat keine Bedingung zum Stoppen (der mittlere Teil)
  • tut nichts nach jeder Iteration (der letzte Teil)

so im Grunde eine Endlosschleife. Es macht einfach das, was es im Schleifenkörper sagt, immer wieder

+0

Siehe die Java Language Specification §14.14.1.2 http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.14.1.2 als Referenz: "Wenn die _Expression_ nicht vorhanden ist, oder es vorhanden ist und der Wert, der sich aus seiner Auswertung ergibt (einschließlich eventueller Unboxing) "wahr" ist, dann wird die enthaltene * Anweisung * ausgeführt. " –

+9

Diese Antwort beweist ziemlich genau die Großartigkeit der" Keine Frage ist zu einfach "Politik. :) –

6

Es ist eine Endlosschleife. Für die Spezifizierung der for-Anweisung siehe here.

5

Das ist eine Endlosschleife, ähnlich wie

while(true) 
{ 
    ... 
} 
2

Sein eine unendliche Schleife, da die (nicht vorhandene) Ausgangsbedingung wird nie falsch sein.

Jede for-Schleife ohne Ausgang Bedingung wird unendlich sein:

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

Genau das gleiche wie while (true), wenn auch ein wenig weniger lesbar IMHO.

2

Das ist in der Tat eine Endlosschleife. Aber in Java sollten Sie wirklich while (true) über for (;;) bevorzugen, da es lesbarer ist (was Sie wahrscheinlich schon erkennen). Der Compiler wird es trotzdem optimieren. In JavaScript gibt es keinen Compiler und jedes Byte über HTTP zählt, deshalb wird for (;;) bevorzugt. Es speichert ein paar Zeichen (Bytes).

+0

+1 für die Lesbarkeit von 'while (true)' – whiskeysierra

+0

Ich finde 'for (;;)' lesbarer zu sein. – jalf

2

Die Syntax für eine for-Schleife ist

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

} 

So ist es einfach eine ohne anfängliche Aussage, nächste Anweisung oder Bedingung für die Schleife ist. Die Abwesenheit der austretenden Bedingung macht es unendlich.