Java上的Boolean.booleanValue函数的好处或用途?

Neu*_*nte 5 java primitive boolean wrapper

所以,我看过这行代码:

Boolean variable = false;
/* ..stuff.. */
if(variable.booleanValue() == false) {
/* ..more stuff..*/
}
Run Code Online (Sandbox Code Playgroud)

而且我已经完成了,在另一个地方:

Boolean variable = false;
/* ..my stuff..*/
if(!variable) {
/* ..more of my stuff..*/
}
Run Code Online (Sandbox Code Playgroud)

问题是:第一段代码与第一段代码有什么区别/优点?

长版本是:鉴于我可以使用布尔变量作为基本(布尔)变量,做变量.booleanValue()甚至将它与布尔值进行比较有什么意义呢?如果变量未初始化,这是否也会引入空指针异常的风险(在代码不可能,但是嘿)?

在任何情况下,建议使用变量"变量"以上的variable.booleanValue?

biz*_*lop 6

两个片段的行为没有区别.

JLS 5.1.8:

在运行时,取消装箱转换过程如下:

如果r是Boolean类型的引用,则取消装箱转换将r转换为r.booleanValue()

所以if (variable) {...}将执行为if (variable.booleanValue()) {...}.而且因为它们完全相同,所以如果它们同样容易受到NPE的影响variable == null.

这意味着显式调用的一个可能的小优点booleanValue()是,您可以立即看到variable被解除引用,而variable == false稍微不那么明显.

无论是添加== false还是否定都是一种品味问题,我宁愿避免使用==运算符将布尔表达式与trueor 进行比较false.

但我认为Boolean完全避免并尽可能使用原始类型更为重要.