2

重複の可能性:
ブール値の結果がわかった後、Javaは残りの条件を評価しますか?

Javaで複数のステートメントを含むコードを実行する&&場合、最初の比較がfalseに解決された場合、コンパイラは追加のブール比較を解決し続けますか?

if (1==2 && 3==4 && 4==5) { Do Something }

falseと判断する1==2と、コンパイラはすぐにifステートメントから抜け出しますか、それとも解決3==4を続け4==5ますか?

4

7 に答える 7

2

その場合&&、条件の1つが偽であることが検出されるとすぐに評価が停止します。これは短絡評価と呼ばれます。

于 2012-10-08T06:26:40.713 に答える
2

「プログラミング言語における短絡評価」

任意の論理式の場合most compiler stop evaluation expression as soon as result evaluated。それは Java だけでなく、ほぼすべての言語で見られます。(ただし、VB6 などのすべてではありません)

次の方法でも確認できます。

i = 0、j = 1;
私 && ++j;
system.out.print(" j=" + j);

の値は、 ++j が実行されなかったj will be 1ことを意味します。

于 2012-10-08T07:36:56.777 に答える
1

これはコンパイラに違いはありません。ブール比較を1つ以上の.classファイルで表されるマシンコードに解決するだけです。

実際の実行時間に関しては...コンピュータサイエンスのクラスで正しく覚えていれば、タルンとリューズの両方の答えが正しいです。正しくない式に到達するとすぐに、比較が短絡します。

于 2012-10-08T06:29:37.310 に答える
1

最初の比較が false に解決された場合、コンパイラは引き続き追加のブール比較を解決しますか?

短い答え。いいえ!コンパイラjavacと は、JITすべてのコードを静的に分析します。このようなショートカットは必要ありません。たとえば、2 番目の条件がコンパイルされない場合、最初の条件に関係なく、常にコンパイル エラーが発生します。

あなたが尋ねようとしていたのは次のようなものです。最初または 2 番目の条件が次の場合、プログラムは他の条件を実行しますかfalse。この場合は実行しません。

于 2012-10-08T06:29:10.470 に答える
0

&&

-上記はshort-circuit AND operatorです。1番目の条件がfalseになる場合、2番目の条件は評価されません。

例えば:

if ((a==false) && (b==true)){


  }

上記は最初の評価後に停止します。

-両方の条件の評価を強制する場合は、Non-Short Circuit AND (&)

于 2012-10-08T06:30:16.007 に答える
0

IF "1==2" が false の場合、コンパイラはすぐに if ステートメントを分割します。

于 2012-10-08T06:28:02.927 に答える
0

タイトルのキーワード「効率」への補足:-他の回答で述べたように、基本的な質問は簡単に答えられるため、効率の問題ではなく、何らかの理由ですべての式を評価する必要がある場合の質問です。状態を変更するコードを実行するとき (ちなみに、これはまったく適切なコーディングではありません)。

しかし、「効率」を実行速度の観点から考えると、そのレベルで最適化する必要はほとんどありません。コンパイラがそれを行うか、違いに気付かないかのいずれかです。タイムクリティカルな操作や非常に大きなループで実行される操作では重要かもしれませんが、他のほとんどすべての場合では、他の人間がそれをよく読めるように、きれいなコードを書くことがはるかに重要です。

于 2012-10-08T06:41:39.090 に答える