(JAVA)Null Pointer Exception,我很困惑

时间:2016-06-08 04:32:43

标签: java nullpointerexception

所以我在Java中对NullPointerExceptions做了一些阅读,但我还是没有完全理解它。

为什么这样做?

if ((department != null && department.equals("COMP")) || (department != null && department.equals("COMM")))
{
    this.department = department;
}

还有另一个有效的方法是我第一次检查时!= null然后再做一个嵌套的if语句然后检查“COMP”或“COMM”。

与上述相比,为什么这个不起作用?

if (department != null || department.equals("COMP")) || department.equals("COMM")))
{
    this.department = department;
}

和大多数人一样,我不喜欢偶然找到解决方案,但却不理解为什么它是一个解决方案。我对编程仍然很陌生,所以我试图了解幕后真正发生的事情。如果有人比喻的话我理解最简单的事情,如果有人可以通过这种方式向我解释,那真的很有帮助>&lt ;;;

非常感谢你们!

2 个答案:

答案 0 :(得分:1)

您的问题的答案在boolean algebra以及您如何实施条件

这样做

goto  >> Setting >>Transfer ownership 

相当于做

A& B | A& C 可以恢复为 A&(B | C) ....所以 A 必须符合 AND 要么 B OR C 才能执行代码...

到目前为止一切顺利。

第二个条件

((department != null && department.equals("COMP")) || (department != null && department.equals("COMM")))

相当于做

A | B | C 无法恢复/简化为任何内容

....所以 A 必须符合 B OR C 才能执行代码...

如果A为空,则第一个条件失败,则java尝试检查条件B,但由于B为空,因此它会以一个很好的 NullPointer异常

爆炸

答案 1 :(得分:0)

由于布尔逻辑和运行时优化。

在布尔句中,如果所有操作数都是AND且一个句子为False,则所有句子都为False。因此,当运行时评估第一个句子并发现它是假的时,它不会评估其他AND句子。比AND情况,没有NullPointerExceptions异常,这意味着尝试访问一个null的对象,如果你先检查它可能会发生。否则,如果句子包含只有OR操作数,运行时必须评估所有句子,因此Null指针异常发生,因为对象为空,OR中的第一个句子是安全的,因为您可以将null对象与NULL进行比较,但第二个是不,因为您无法访问null对象属性。