Java运算符优先

arj*_*soh 4 java operators

由于Java中运算符优先级的原因,我感到很困惑.我读的教程以前,时间长,具有比OR,这是在提供的答案证实了更高的优先级问题.但是,我目前正在使用"Sun认证的Java 6程序员学习指南"来学习Java.本书包含以下示例:

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

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

If (x > 3)is true,或者是(y < 2)或者结果 doStuff()true,然后打印"true".由于短路&&,表达式被评估为好像周围有括号(y < 2) | doStuff().换句话说,它被评估为单个表达式之前&&和之后的单个表达式&&.

这意味着虽然|优先级高于&&.是不是因为使用了"非短路OR"而不是短路OR?什么是真的?

mpr*_*vat 8

那是因为它使用的是|运算符而不是||优先级更高的运算符.这是桌子.

||改为使用操作员,它会按照您的想法行事.

  • @arjacsoh:我的意思是这句话是错误的:*由于短路&&,表达式被评估为好像周围有括号(y <2)| 做东西()*.它实际上应该是:*因为| 具有比&&更高的优先级,表达式被评估为围绕(y <2)|括号 做东西()*. (2认同)