我很难理解Java中短路运算符的优先级。根据短路行为,表达式“true || true”的右边部分在这里无关紧要,因为曾经“&&”的第一部分条件被评估为“假”,表达的其余部分应该没有被评估。
但是,在执行下面的代码时,我看到结果声明为“true”。有人可以向我解释一下吗?
public class ExpressionTest{
public static void main(String[] args) {
boolean result1 = false && true || true;
System.out.println(result1);
}
}
答案 0 :(得分:4)
在运营商上查看此tutorial。该表清楚地表明&&
的优先级高于||
。
所以,
false && true || true;
评估为:
(false && true) || true;
休息我认为你可以自己评估。
答案 1 :(得分:4)
同一行上的运算符具有相同的优先级。当经营者 相同的优先级出现在同一个表达式中,必须遵守规则 首先评估。除了之外的所有二元运算符 赋值运算符从左到右进行评估;分配 运营商从右到左进行评估
因此,编译器将其解析为
boolean result1 = (false && true) || true;
因此,无论A || true
值如何,true
都会返回A
。
要获得理想的表达式,请执行以下操作:
boolean result1 = false && (true || true);