我在理解Java中短路运算符的优先级方面遇到了困难。 根据短路行为,此处的" true || true"的右部分应该无关紧要,因为一旦" &&"条件的第一部分被评估为" false",则该表达式的其余部分就不会 被评估。
但是,当执行以下代码时,我看到声明为" true"的结果。 有人可以向我解释吗?
public class ExpressionTest{
public static void main(String[] args) {
boolean result1 = false && true || true;
System.out.println(result1);
}
}
从JAVA turorial
Operators on the same line have equal precedence. When operators of
equal precedence appear in the same expression, a rule must govern
which is evaluated first. All binary operators except for the
assignment operators are evaluated from left to right; assignment
operators are evaluated right to left
因此,编译器将其解析为
boolean result1 = (false && true) || true;
因此,A || true返回true而不管A的值如何。
要获得理想的表达式,请执行以下操作:
boolean result1 = false && (true || true);
谢谢回复! Java教程现在对我来说很清楚,从左到右的评估是这里的关键。
查看有关操作员的本教程。 该表清楚地显示了&&的优先级高于||。
所以,
false && true || true;
评估为:
(false && true) || true;
休息,我认为您可以自己评估。
谢谢回复! 我现在理解为什么表达式求值为" true"。 但是,为什么使编译器选择评估策略为(false && true)||。 真正。 相反,它可能只是在" &&"运算符之前看到" false"之后才忽略了语句的其余部分?
@ sunsin1985。 Java从左到右计算表达式。 就是这样。
谢谢! 那对我解释了。