次のコード行がありました
boolean b = false;
for (int i = 0; b; i++) {}
それはうまく実行されます
上記のコードを
for (int i = 0; false; i++) {}
それは与える - > java.lang.Error: Unresolved compilation problem: Unreachable code
なぜ?助けてください。
次のコード行がありました
boolean b = false;
for (int i = 0; b; i++) {}
それはうまく実行されます
上記のコードを
for (int i = 0; false; i++) {}
それは与える - > java.lang.Error: Unresolved compilation problem: Unreachable code
なぜ?助けてください。
基本的b
に、最初のコードはコンパイル時の定数式ではありませんが、そうfalse
です。最初のコードのブール変数を次のように変更した場合:
final boolean b = false;
b
の値を後で変更できないため、これは定数式であるため、コンパイルに失敗します。
foreach ループの 2 番目のパラメーターは条件です。この条件がtrue
である間、ループが実行されます。パラメータとして指定するfalse
と実行されないため、その中のコードに到達できません。
最初のものが機能し、2 番目が機能しない理由は、コンパイラが の値をチェックしなかった (または十分に導出できない) ためですが、条件b
を単純に使用するとfalse
、あいまいではありません。
値をハードコードするのとは対照的に、実行がループに到達したときにどの値が含まれるかをチェックしないため (これはランタイムの作業です)、条件に変数を使用してもコンパイラは文句を言いませんfalse
。
もちろん!false 条件のため、ループ本体は決して実行されません。その結果、実際にはループと i++ の本体に到達できません。とにかくそれをする意味は何ですか?