嗨,我有这个例子:
(1)
if(false && false ||true){
System.out.println("a");
}
结果:
a
和
(2)
if(false && false | true){
System.out.println("a");
}
结果:
(empty)
在情况(1)中我们有短路OR,但在第二种情况下我们有长电路OR。行为的差异从哪里来?我知道表达式从左到右进行评估,并且AND的优先级高于OR,所以我无法弄清楚为什么在情况2中会发生这种情况?
答案 0 :(得分:5)
&&
的优先级高于||
但不超过|
。请参阅operator precedence list。
答案 1 :(得分:3)
(1)
if (false && false || true) {
System.out.println("a");
}
此处&&
的优先级高于||
false && false
false
。false || true
评估结果为true
。结果输出" a"。
(2)
if (false && false | true) {
System.out.println("a");
}
此处|
的优先级高于&&
false | true
true
。false && true
评估结果为false
。所以没有输出。
希望它有意义