public class A{
public static void main(){
boolean result = true || 3 < 5/0 && false;
System.out.println(result);
}
}
我编译了这个程序。它按预期完美地编译了。但是当我运行这个程序时,它给出了一个输出-
true
嗯,这个问题困扰我,因为很明显除号(/)的优先级最高。然后是小于(<)运算符,接着是AND(&&)运算符,最后是OR(||)运算符。所以按照我的想法,应该按照以下步骤进行 -
true || 3 < (5/0) && false
在这个点上,它应该引发异常。但是这并没有发生。我认为计算机按照以下方式评估了此表达式 -
(true) || 3 < 5/0 && false
然后因为短路评估,它不再需要评估 || 的右侧。但是 || 在这些运算符中优先级最低!!有人能解释一下这个表达式是如何逐步执行的,以及为什么 && 的优先级高于 || 吗?非常感谢您的阅读 :)
&&
has a higher priority than||
:(true || ((3 < 5/0) && false))
- Dmitry Bychenko