哪种方式更好地检查布尔值以及为什么? 我有一个代码,在前面的方法返回true时调用一个方法。 我提出了不同的方法,哪一个更好?请提供答案的原因。
boolean check1=methodA();
boolean check2=methodB();
boolean check3=methodC();
这样更好吗
if(check1==check2==check3==true){
method4();
}
还是这个?
if(check1 && check2 && check3){
method4();
}
答案 0 :(得分:3)
if(check1 && check2 && check3){
method4();
}
与
有不同的含义if(check1==check2==check3==true){
method4();
}
当true==false==false==true
显然是true
时, true&&false&&false
为false
。为什么?当我们有相同优先级的运算符时,我们从左到右。
check1==check2==check3==true
实际上是:
(((check1==check2)==check3)==true)
(((true==false)==false)==true)
(( false ==false)==true)
( true ==true)
true
答案 1 :(得分:1)
第一个变种是错误的。它没有给出1
,check1 = true
和check2 = false
答案 2 :(得分:1)
为了完整起见,有四种方法可以满足第一个条件(有些方法已被提及,但我会收集它们以便于查看)
按照出现的顺序,check1, check2, check3
false, false, true
(因为false == false
是true
)false, true, false
(因为false == true
是false
)true, false, false
(因为true == false
是false
)true, true, true
(因为true == true
是true
)毫无疑问,这正是XNOR的真值表,即逻辑平等。
从技术上讲,根据" [true
],如果前面的方法返回true作为值",则 如果所有检查都是是的,在其他一些情况下也是如此,如果"没有说什么,因为它是一个单向的含义。但很可能你的意思是 iff (当且仅当),然后它就错了。