2012-04-17 15 views
4

は誰が次の問題で私を助けることができる:Java対応&&は評価

私のようなコードを持っている:ここで

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

を、その出力はブール値で高価な操作がCOND1あります。

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

より具体、

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

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

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

+0

どちらも同じ...最初のスニペットは2番目に表示されているように評価します。 –

+0

falseになると停止します。また、条件のいずれかが失敗した場合、すべてが失敗するため、おそらく最も安価な条件を最初に置くべきです。あなたは高価な条件をチェックする必要はありませんなぜ? – PaulG

+0

@PaulGだから、私は尋ねた、それはLRの方法またはRLの方法で評価されていますか? – Arpssss

答えて

11

&&演算子は、常にfalseで短絡します。条件3は、条件1と条件2がtrueの場合にのみ評価されます。

2

はい、コードスニペットは同等です。論理AND演算子はJavaの短絡状態です。

1

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

4

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

+0

ありがとう。それはLR方法かRL方法で評価されますか? – Arpssss

+3

左から右または右から左を意味する場合は、左から右に評価されます。 – twain249

+1

「表現全体」には何の関係もありません。これらの演算子は個別に短絡*と評価されます。 – EJP

2

Javaは値の1つが偽であることがわかるとすぐにチェックを終了します。

同様に、値の1つが真であることがわかるとすぐに、ORで期待したことを行います。

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

2

偽になるとすぐに停止します(これは短絡回路ロジックと呼ばれます)。あなたの場合、cond3は決して評価されません。また、条件は左から右に評価されるので、最も安価な条件を左に置くことは常に良い考えです。これにより、高価な状態を不必要に評価することを避けることができます。

例(擬似コード)

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

がcalculcationを必要とする第二の状態をチェックしません。彼が男性ではない場合(単純な真実または偽)、第二を確認する必要はありません。

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 
1

& &は、条件がブレークと全体の条件が偽になるだろう、任意の単一の条件偽の場合は左から右に実行されます。 cond2がfalseの場合、cond3 ..と他のものは実行されません。他の手で 単一の&を使用すると、処理されるすべての条件がfalseまたはtrueに関係しなくなるまで、左から右に実行されます。その差は& &で、最初のfalseで除外を停止し、&は最後の条件まで継続します。