4

1.1。

for (int i = 0; (boolean)true; i++) { 

}

2.2。

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

}

3.3。

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

}

最初のforループはコンパイルして実行しますが、2番目のforループはコンパイルして実行しますcompilation fails with error。それは言うUnreachable Statement。そして、3番目のforループはコンパイルして実行します。

4

4 に答える 4

4

最初のループは無限ループです。条件は常に真であるため、常に満たされます。

それは書くようなものです:

int i=0;
while(true)
   i++;

ご覧のとおり、条件は常にtrueあり、これを変更するものはありません。

2番目のループはUnreachable code、このループの下にあるコードに到達することはないためです(false常にfalseであり、変更することはありません)。したがって、冗長です。

14.21章を参照してください。到達不能なステートメント

プログラマーが人間であることを知っているのでJava:)間違いを防ぐためにこれについて通知します。

または、その下のコードは実行されないwhile(false)ため、2番目のループ(またはループ)は意味をなさないことに注意してif(false)...ください。そうではないかもしれないので、この場合、コンパイラはそれについて文句を言いません。while(false)if(false)else


OPアップデートについて:

3番目のケースでは、値が変数に割り当てられているため、コンパイルエラーは発生しませんfalse。この場合、変数を再割り当てしてtrue値を含めることができます。したがって、コンパイラはエラーを発生させません。変数がとして宣言されている場合、finalこの変数を新しい値に割り当てることはできないため、コンパイラーでエラーが発生することに注意してください。したがって、forループの下のコードに到達できなくなります。

于 2013-03-17T06:44:25.400 に答える
0

2番目のforループでは、条件は常にでfalseあるため、forブロックは(空であっても)実行されません(空であってもunreacheable)。

この場合のように:

if (false) {
}
于 2013-03-17T06:45:24.097 に答える
0
 for (int i = 0; <This_has_to_be_true>; i++)

ループを実行するには、for ループの 2 番目の部分が true である必要があります。常に fase になるように手動で設定しているため、ループは実行されないため、ループ内のコードに到達できません。

于 2013-03-17T06:45:36.537 に答える
0

コンパイラは、2 番目のループ内のコード (空の場合でも)に到達して実行されないことを通知しています。これは、条件が常に であるためfalseです。

ところで、なぜとにかくこれをやろうとしているのですか?

于 2013-03-17T06:47:39.460 に答える