Object.equals(Boolean,Boolean)与逻辑运算符(Java)

its*_*ity 2 java boolean object boolean-expression boolean-operations

首先,对这个非常基本的问题表示歉意。我对stackoverflow还是比较陌生,但是对此我挠头了,希望能有所启发。

好的,所以今天在工作中,我和我的同事的代码经过同行审查,并被要求替换。

Boolean isOpen;
*some processing that involves altering the value of isOpen*
if (!isOpen){
...
}
Run Code Online (Sandbox Code Playgroud)

有了这个..

if (Objects.equals(Boolean.FALSE, isOpen)){
...
}
Run Code Online (Sandbox Code Playgroud)

我知道这两种实现都是正确的,并且产生相同的结果。我也知道使用Boolean对象包装器的后果。

我没有得到的是在这种情况下使用NOT运算符和Objects.equals()之间的区别。我知道在运行时isOpen它将被拆箱。两者仍然容易受到影响,有NullPointerException什么区别?这有点超出了逻辑运算符的目的。

Era*_*ran 8

课堂上没有static equals方法Object

你可能是说Objects.equals()。使用的优点Objects.equals(Boolean.FALSE, isOpen),而不是!isOpen是为了避免NullPointerExceptionisOpennull

也就是说,如果可能的话,我宁愿isOpen从更改Booleanboolean,并保持!isOpen条件不变。