Java运算符优先

由于Java中运算符优先级的原因,我感到很困惑。 我很久以前在教程中读到AND的优先级高于OR,这可以通过问题中提供的答案得到证实。 但是,我目前正在使用“Sun认证的Java 6程序员学习指南”来学习Java。 本书包含以下示例:

int y = 5; int x = 2; if ((x > 3) && (y < 2) | doStuff()) { System.out.println("true"); } 

我正在复制并引用编译器如何处理上述代码的解释:

If (x > 3)true ,并且(y < 2)doStuff()的结果为true ,则打印"true" 。 由于短路&& ,表达式被评估为围绕(y < 2) | doStuff()括号 (y < 2) | doStuff() 。 换句话说,它被评估为&&之前的单个表达式和&&之后的单个表达式。

这意味着虽然| 优先级高于&& 。 是由于使用“非短路OR”而不是短路OR? 什么是真的?

那是因为它正在使用| 运算符而不是|| ,具有更高的优先级。 这是桌子。

使用|| 而不是运营商,它会做你的想法。

由于短路&&,表达式被评估为围绕(y <2)|括号 做东西() ...

这种说法是不正确的,实际上毫无意义。 &&是短路运算符的事实与(y <2)|的评估无关 doStuff(),实际上只有在doStuff()返回布尔值时才能编译。 差异(隐含括号)是&&相对于|的优先级 ,它在JLS ## 15.22-23中定义为&&更低。