所以我在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 ;;;
非常感谢你们!
答案 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对象属性。