我想知道如果变量为空会发生什么,并且在布尔条件下,对该空变量调用一个方法。它会抛出异常吗?
MyObj chair = null
chair = getSpecialMethod();
if(chair != null && chair.size()){
....
}
如果为空,会发生什么情况chair
,即使在调用之前检查了空值,是否也会抛出异常? chair.size()
我想知道如果变量为空会发生什么,并且在布尔条件下,对该空变量调用一个方法。它会抛出异常吗?
MyObj chair = null
chair = getSpecialMethod();
if(chair != null && chair.size()){
....
}
如果为空,会发生什么情况chair
,即使在调用之前检查了空值,是否也会抛出异常? chair.size()
不,条件的第二部分没有被评估,因为第一部分是false
,当chair
是时null
,所以 aNullPointerException
不会被抛出。
从第15.23 节开始。Java 语言规范中的条件与运算符 && :
条件与运算符 && 类似于 &(第 15.22.2 节),但仅当其左侧操作数的值为真时才计算其右侧操作数。
在这种情况下没关系,&&
是一个短路运算符,因此如果chair
为空,chair.size()
则不会运行。如果您确实在空引用上调用了一个方法,但是它会抛出一个NullPointerException
既然你用过&&
,你就没事。如果遇到错误条件,则不会继续。如果你使用过&
,那么这两个条件都会被检查并且你会得到一个NullPointerException
.