null检查java后发生NullPointerException

时间:2013-03-30 01:09:12

标签: java null nullpointerexception

我有这个if语句

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

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

3 个答案:

答案 0 :(得分:5)

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

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

如果check1nullcheck2null,则第一个语句将评估为true。当您转到第二个语句时会出现问题,因为check2nullcheck2.isSolid()将通过NullPointerException

将括号更改为

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

答案 1 :(得分:1)

你混淆了括号。尝试:

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

答案 2 :(得分:1)

试试这个:

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

if (check1_result && check2_result)
// do work...