java 条件运算符,为什么下面的代码输出为真?
java conditional operator,why following code is giving output as true?
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??
您的代码等同于此语句::
如果 A 为真或 B 为真则命题为真
因为 B 设置为真,所以你的说法是正确的。此外,没有必要测试 A 两次,而不是做
(a && a || b) // old
(a || b) //new
&&
的运算顺序比 ||
高,所以先求值。
要解决此问题,您可以使用大括号
if( a && ( a || b )) //tests as i believe you wanted although its redundent
运算顺序。
&&
比 ||
具有更高的优先级,因此被评估为 first。您的 if
条件可以改写如下:
(a && a) || b
(false && false) || true
false || true
true
此条件将始终为 false || true
,对于您列出的条件,该条件始终为 true
。
查看 here Oracle 的官方 table,其中列出了所有运算符的优先级。
a && a || b :
a && a => false && false => false
false || b => false || true => true
如果有括号改变运算符优先级:
a && (a||b) :
a || b => false || true => true
a && true => false && true => false
那么结果就不一样了
寓意:如果您不确定优先顺序,请使用括号,这样您就确定了。
A = 假
B = 真
A && A(假 && 假)= 假
( A && A(假) ) || B(真)=真
你的最后一个表达是False || True = True
这是因为先求解 AND(&&) 运算符,然后再求解 OR(||) 运算符。
运行
if (b||a&&a) {
System.out.println(true);
}
它会再次给你 true 因为 && 是先计算的。
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??
您的代码等同于此语句::
如果 A 为真或 B 为真则命题为真
因为 B 设置为真,所以你的说法是正确的。此外,没有必要测试 A 两次,而不是做
(a && a || b) // old
(a || b) //new
&&
的运算顺序比 ||
高,所以先求值。
要解决此问题,您可以使用大括号
if( a && ( a || b )) //tests as i believe you wanted although its redundent
运算顺序。
&&
比 ||
具有更高的优先级,因此被评估为 first。您的 if
条件可以改写如下:
(a && a) || b
(false && false) || true
false || true
true
此条件将始终为 false || true
,对于您列出的条件,该条件始终为 true
。
查看 here Oracle 的官方 table,其中列出了所有运算符的优先级。
a && a || b :
a && a => false && false => false
false || b => false || true => true
如果有括号改变运算符优先级:
a && (a||b) :
a || b => false || true => true
a && true => false && true => false
那么结果就不一样了
寓意:如果您不确定优先顺序,请使用括号,这样您就确定了。
A = 假
B = 真
A && A(假 && 假)= 假
( A && A(假) ) || B(真)=真
你的最后一个表达是False || True = True
这是因为先求解 AND(&&) 运算符,然后再求解 OR(||) 运算符。 运行
if (b||a&&a) {
System.out.println(true);
}
它会再次给你 true 因为 && 是先计算的。