0

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

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

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

4

3 回答 3

6

不,条件的第二部分没有被评估,因为第一部分是false,当chair是时null,所以 aNullPointerException不会被抛出。

从第15.23 节开始。Java 语言规范中的条件与运算符 && :

条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为真时才计算其右侧操作数。

于 2013-06-17T20:01:36.527 回答
1

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

于 2013-06-17T20:01:17.717 回答
1

既然你用过&&,你就没事。如果遇到错误条件,则不会继续。如果你使用过&,那么这两个条件都会被检查并且你会得到一个NullPointerException.

于 2013-06-17T20:14:54.320 回答