古い会社コードを調べてみると、次のようなforループが見つかりました。
for (;;) {
//Some stuff
}
Googleを試してみましたが、答えが見つかりませんでした。プログラミングクラスで眠りましたか、それとも異常なループですか?
Javaのfor
ループの構造は次のとおりです-
_for (initialization statement; condition check; update)
loop body;
_
ご覧のとおり、ここには4つのステートメントがあります-
true
と評価されます。基本的に、これは実行の続きです。最初に、ループに初めて入ると、初期化ステートメントが1回実行されます。次に、条件付きチェックが実行され、trueと評価されたかどうかが確認されます。そうである場合、ループ本体が実行され、そうでない場合、ループ実行は終了します。その後、Updateステートメントが実行されます。次に、条件付きチェックが再度実行され、trueと評価された場合、ループ本体が再度実行され、updateステートメントが実行され、次に条件付きチェックが実行されます。
for( ; ; )
構文について説明します。初期化ステートメントがないため、何も実行されません。条件チェック文も空です。つまり、ループ本体が実行された後にtrueと評価されます。次に、更新ステートメントが空なので、何も実行されません。その後、条件付きチェックが再度実行され、再び真と評価され、このプロセス全体が再び繰り返されます。
つまり、これは基本的に、初期化ステートメントがなく、条件チェックが常にtrueと評価され、更新ステートメントがない無限ループです。これは-と同等です
_while(true)
{
.....
}
_
これは、Javaのもう1つの一般的なループ構造です。
このような無限ループを使用する場合、ほとんどの場合、ループを無期限に実行させることはできないため、ブレーク条件に注意することが重要です。これらの種類のループから抜け出すには、break
ステートメントを使用できます。構造は次のとおりです-
_if(some_condition_is_true)
break; // This will cause execution to break out of its nearest loop
_
または
_if(some_condition_is_false)
break;
_
これは次と同じです:
while(true) {
//Some Stuff
}
基本的に、無限ループの代替構文。
これらはすべて無限ループです
for(;;) {
// endlessly
}
while(true) {
// endlessly
}
do {
// endlessly
} while(true);
このループにはガードがなく、while(true)ループとして機能します。休憩まで無限ループします。
それは無限ループです。実際にはコンパイルされるか、実行時エラーがスローされるのは直感的ではないため、正確にコーディングすることはできません。 while(true) { /* code */ }
として書き換えると、無限ループを示すためにはるかに読みやすくなります。
それは無限ループです。初期化、条件、および増分ステートメントはすべてオプションであるため、これらのいずれも使用しない場合、これは常にループします(ブレークがヒットするか、他の構造がそれと対話しない限り)。
Javaについては確信がありませんが、 この質問 は、.Netで空のfor
とwhile (true)
がまったく同じものにコンパイルされる方法を説明しています。 Javaも同様です。