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中定义为&&更低。