2016-12-12 59 views
1

哪種方式更好地檢查布爾值,爲什麼? 我有一個代碼,其中一個方法在前面的方法返回true時被調用。 我想出了不同的方法來實現,哪一個更好?請提供答案的理由。檢查布爾條件,哪種方式更好

boolean check1=methodA(); 

boolean check2=methodB(); 

boolean check3=methodC(); 

這是更好的方式

if(check1==check2==check3==true){ 

method4(); 

} 

或那樣嗎?

if(check1 && check2 && check3){ 

method4(); 

} 
+1

我會去的方式2,因爲它更容易閱讀 – XtremeBaumer

+1

第一種方法並不意味着你認爲這意味着 – harold

+2

你的第一個選擇是混淆......假==假==真==真如果在if條件,這不是你想要的。 – kimy82

回答

1

爲了完整預期的結果,有四種方法以滿足第一條件(有些已經提到過,但我會收集他們容易概述)

爲了外觀,check1, check2, check3

  • false, false, true(因爲false == falsetrue
  • false, true, false(因爲false == truefalse
  • true, false, false(因爲true == falsefalse
  • true, true, true(因爲true == truetrue

應該不會感到驚訝,這正是XNOR又名邏輯平等的真值表。

從技術上講,這使得按照「[true]如果上述方法都返回true值」,它真,如果所有的檢查都真的,那是正確的,它也只是在其他一些情況下,真實「如果「對此沒有提及,因爲這是一個單向的含義。但很可能你的意思是iff(當且僅當),然後它是錯誤的。

3
if(check1 && check2 && check3){ 
    method4(); 
} 

具有不同的含義比

if(check1==check2==check3==true){ 
    method4(); 
} 

true==false==false==truetruetrue&&false&&false顯然是false。爲什麼?當我們擁有相同優先級的運算符時,我們從左到右。

check1==check2==check3==true其實:

(((check1==check2)==check3)==true) 
(((true==false)==false)==true) 
(( false ==false)==true) 
(  true   ==true) 
       true 
1

第一個變種是錯誤的。它提供了不check1 = truecheck2 = falsecheck3 = false