Java:布尔表达式中的短路评估

时间:2013-06-17 19:59:07

标签: java

我想知道如果变量为null会发生什么,并且在布尔条件下,会在该null变量上调用一个方法。它会抛出异常吗?

MyObj chair = null
chair = getSpecialMethod();
if(chair != null && chair.size()){
  ....
}

如果chair为空,会发生什么情况,即使在调用 chair.size()之前检查了空值,也会引发异常?

3 个答案:

答案 0 :(得分:6)

不,当falsechair时,条件的第二部分未被评估,因为第一部分是null,因此不会抛出NullPointerException

来自Java语言规范中的15.23. Conditional-And Operator &&部分:

  

条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。

答案 1 :(得分:1)

在这种情况下无关紧要,&&是短路运算符,因此如果chair为空,则chair.size()将不会运行。如果你确实在空引用上调用了一个方法,那么它会抛出一个NullPointerException

答案 2 :(得分:1)

由于你使用了&&,你很好。如果遇到错误的情况,它就不会继续。如果您使用了&,则会检查这两个条件并获得NullPointerException