0

我有这个 if 语句

if((check1==null||!check1.isSolid())&&(check2==null)||!check2.isSolid())

它抛出一个空指针异常,因为 check1 或 check2 为空,但我不明白它为什么这样做,因为我在访问对象之前检查空条件,如果对象为空,为什么 java 会打扰检查isSolid 因为它已经是真的了。

4

3 回答 3

5

你把括号弄乱了。Java 会将您的语句组合在一起,如下所示:

((check1 == null || !check1.isSolid()) && check2 == null) || !check2.isSolid()

如果check1isnullcheck2, is null,第一条语句的计算结果为true。当您继续执行第二个语句时会出现问题,因为ischeck2将通过.nullcheck2.isSolid()NullPointerException

将括号更改为

(check1 == null || !check1.isSolid()) && (check2 == null || !check2.isSolid())
于 2013-03-30T01:13:38.573 回答
1

你把括号弄混了。尝试:

if((check1==null||!check1.isSolid())&&(check2==null||!check2.isSolid()))
于 2013-03-30T01:14:13.833 回答
1

试试这个:

boolean check1_result = (check1 == null) ? true : !check1.isSolid();
boolean check2_result = (check2 == null) ? true : !check2.isSolid();

if (check1_result && check2_result)
// do work...
于 2013-03-30T01:20:32.157 回答