5

誰でも次の問題について私を助けることができます:

私は次のようなコードを持っています:

if(cond1 && cond2 && .. && cond10)

ここで、cond1 は、出力がブール値である高価な操作です。

ここで私の質問は、cond2 の出力が false の場合に JAVAC が行うことです。具体的には、 cond3 の出力を評価するか、評価を停止しますか?

より具体的には、

if(cond1 && cond2 && .. && cond10)
  //do this

if(cond1){
  if(cond2){
         .
         .
         .
        if(cond10){
             //do this
                   }

Javaでも同じですか(実行方法の場合)?

4

8 に答える 8

16

オペレーターは&&常に を短絡しfalseます。条件 3 は、条件 1 と 2 が の場合にのみ評価されますtrue

于 2012-04-17T16:55:30.420 に答える
5

式全体が&&orの場合||、Java は短絡評価を使用します。つまり、すべてが&&最初の false の後に停止し、すべてが||最初の true の後に停止します。

于 2012-04-17T16:56:00.963 に答える
2

false になるとすぐに停止します (これは短絡ロジックとして知られています)。あなたの場合、 cond3 は決して評価されません。また、条件は左から右に評価されるため、最も安価な条件を左側に配置することを常にお勧めします。これにより、高価な条件を不必要に評価することを回避できます。

例 (疑似コード)

if(JohnIsMale && IsJohnsCholesterolTooHigh())
   {
   //Tell John to take it easy on the ice cream cause he could develop a heart condition
   }

計算が必要なため、最初に 2 番目の条件をチェックしないでください。彼が男性でない場合 (単純な true または false)、2 番目を確認する必要はありません。

于 2012-04-17T17:01:58.703 に答える
2

はい、コードスニペットは同等です。論理 AND 演算子が Java ショートサーキットになっています。

于 2012-04-17T16:55:24.150 に答える
2

Java は、値の 1 つが false であることが判明するとすぐにそのチェックを終了します。

同様に、値の 1 つが true であることが判明するとすぐに、OR で期待されることを実行します。

他人を評価する必要はありません。

于 2012-04-17T16:56:23.877 に答える
1

それは....のように動作します

if(cond1){ //if its true then check con2 ,else exit
  if(cond2){//if its true then check con 3, else exit
       if(cond3){.....


and Both code snippets  are same 
于 2012-04-17T17:03:33.173 に答える
1

&& は左から右に実行されます。条件が 1 つでも false の場合、条件は中断され、条件全体が false になります。cond2 が false の場合、cond3.. などは実行されません。一方、 single & を使用すると、処理されたすべての条件が false または true でなくなるまで、左から右に実行されます。その違い && は最初の false で実行を停止し、 & は最後の条件まで続行します。

于 2012-04-17T17:07:51.377 に答える
1

直接答えるには: はい、本質的に同じです。

于 2012-04-17T16:56:00.257 に答える