我想知道如果变量为null会发生什么,并且在布尔条件下,会在该null变量上调用一个方法。它会抛出异常吗?
MyObj chair = null
chair = getSpecialMethod();
if(chair != null && chair.size()){
....
}
如果chair
为空,会发生什么情况,即使在调用 chair.size()
之前检查了空值,也会引发异常?
答案 0 :(得分:6)
不,当false
为chair
时,条件的第二部分未被评估,因为第一部分是null
,因此不会抛出NullPointerException
。
来自Java语言规范中的15.23. Conditional-And Operator &&部分:
条件和操作员&&就像& (§15.22.2),但仅在其左侧操作数的值为真时才计算其右侧操作数。
答案 1 :(得分:1)
在这种情况下无关紧要,&&
是短路运算符,因此如果chair
为空,则chair.size()
将不会运行。如果你确实在空引用上调用了一个方法,那么它会抛出一个NullPointerException
答案 2 :(得分:1)
由于你使用了&&
,你很好。如果遇到错误的情况,它就不会继续。如果您使用了&
,则会检查这两个条件并获得NullPointerException
。