class test {
public static void main (String[] args) {
boolean a = false;
boolean b = true;
if (a && a || b) {
System.out.println(true);
}
}
} //--why it always true????o/p is true but why??
答案 0 :(得分:7)
操作顺序。
&&
的优先级高于||
,因此首先评估 。您的if
条件可以按如下方式重写:
(a && a) || b
(false && false) || true
false || true
true
对于您列出的条件,此条件始终为false || true
,始终为true
。
检查here以获取Oracle的官方表格,其中列出了所有运营商的优先顺序。
答案 1 :(得分:1)
您的代码与此语句等效:
如果A为真或B为真,则该陈述为真
由于B设置为true,因此您的陈述为真。此外,没有必要测试A两次,而不是做
(a && a || b) // old
(a || b) //new
&&
具有更高的操作顺序,然后是||
,因此首先进行评估。
要解决此问题,您可以使用大括号
if( a && ( a || b )) //tests as i believe you wanted although its redundent
答案 2 :(得分:0)
a && a || b :
a && a => false && false => false
false || b => false || true => true
如果有改变运算符优先级的parens:
a && (a||b) :
a || b => false || true => true
a && true => false && true => false
然后结果会有所不同。
道德:如果你不确定优先使用parens所以你确定。
答案 3 :(得分:0)
A =假
B =真
A&& A(假和&假)=假 (A& A(假))|| B(真)=真
您的上一个表达是*ho96.com/*
答案 4 :(得分:0)
这是因为AND(&&)运算符先是OR(||)运算符求解。 运行
if (b||a&&a) {
System.out.println(true);
}
它会再次给你真实,因为&&首先计算。