检查布尔条件,哪种方式更好

时间:2016-12-12 11:32:55

标签: java

哪种方式更好地检查布尔值以及为什么? 我有一个代码,在前面的方法返回true时调用一个方法。 我提出了不同的方法,哪一个更好?请提供答案的原因。

boolean check1=methodA();

boolean check2=methodB();

boolean check3=methodC();

这样更好吗

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

method4();

}

还是这个?

if(check1 && check2 && check3){

method4();

}

3 个答案:

答案 0 :(得分:3)

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

有不同的含义
if(check1==check2==check3==true){
    method4();
}
true==false==false==true显然是true时,

true&&false&&falsefalse。为什么?当我们有相同优先级的运算符时,我们从左到右。

check1==check2==check3==true实际上是:

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

答案 1 :(得分:1)

第一个变种是错误的。它没有给出1check1 = truecheck2 = false

的预期结果

答案 2 :(得分: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 (当且仅当),然后它就错了。