0

次のコード行がありました

boolean b = false;
for (int i = 0; b; i++) {}

それはうまく実行されます

上記のコードを

for (int i = 0; false; i++) {}

それは与える - > java.lang.Error: Unresolved compilation problem: Unreachable code

なぜ?助けてください。

4

4 に答える 4

8

基本的bに、最初のコードはコンパイル時の定数式ではありませんが、そうfalseです。最初のコードのブール変数を次のように変更した場合:

final boolean b = false;

bの値を後で変更できないため、これは定数式であるため、コンパイルに失敗します。

于 2013-10-05T12:28:21.760 に答える
4

foreach ループの 2 番目のパラメーターは条件です。この条件がtrueである間、ループが実行されます。パラメータとして指定するfalseと実行されないため、その中のコードに到達できません。

最初のものが機能し、2 番目が機能しない理由は、コンパイラが の値をチェックしなかった (または十分に導出できない) ためですが、条件bを単純に使用するとfalse、あいまいではありません。

于 2013-10-05T12:25:51.827 に答える
2

値をハードコードするのとは対照的に、実行がループに到達したときにどの値が含まれるかをチェックしないため (これはランタイムの作業です)、条件に変数を使用してもコンパイラは文句を言いませんfalse

于 2013-10-05T12:27:22.820 に答える
0

もちろん!false 条件のため、ループ本体は決して実行されません。その結果、実際にはループと i++ の本体に到達できません。とにかくそれをする意味は何ですか?

于 2013-10-05T12:29:55.347 に答える