我有这个 if 语句
if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid())
它抛出一个空指针异常,因为 check1 或 check2 为空,但我不明白为什么要这样做,因为我在访问对象之前检查空条件,如果对象为空,为什么会这样做java 不必检查 isSolid 因为它已经是 true 了。
最佳答案
你把括号弄乱了。 Java 会将您的语句组合在一起,如下所示:
((check1 == null || !check1.isSolid()) && check2 == null) || !check2.isSolid()
如果check1
是 null
和check2
,是null
,第一个语句的计算结果为 true
。当您转到第二条语句时,就会出现问题,因为 check2
是 null
, check2.isSolid()
将通过NullPointerException
.
将括号更改为
(check1 == null || !check1.isSolid()) && (check2 == null || !check2.isSolid())
关于java - java空检查后发生NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15713792/