Mar*_*son 1 java operator-precedence unary-operator logical-or
鉴于:
Object x = null;
Run Code Online (Sandbox Code Playgroud)
考虑代码片段#1:
if (x == null || !x.equals(new Object()))
System.out.println("I print!");
Run Code Online (Sandbox Code Playgroud)
代码片段#1并没有NullPointerException像我原先认为的那样抛出.我可以通过|运营商的一些帮助激起例外.代码段#2:
if (x == null | !x.equals(new Object()))
System.out.println("This will throw a NullPointerException..");
Run Code Online (Sandbox Code Playgroud)
那么为什么我的第一个代码片段从未评估过具有一元NOT运算符的正确表达式(感叹号!)?根据..那里所有的网站..一元NOT运算符的优先级高于逻辑OR运算符(||)的优先级.
一元NOT运算符的优先级高于逻辑OR运算符(||)的优先级.
对,是真的.但是,如果在逻辑OR的第一个表达式上使用NOT,则优先级将生效.
考虑条件:
if (!x.equals(y) || y.equals(z))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,否定将首先应用于x.equals(y)逻辑OR之前的结果.因此,如果优先级||大于!,那么表达式将被评估为:
if (!(x.equals(y) || y.equals(z)))
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.如你所知.
但是,如果NOT运算符在第二个表达式上,则优先级不是此处的一个点.第一个表达式将始终在第二个表达式之前首先计算.并且短路行为将发挥作用.
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |