所以,我看到了这行代码:
Boolean variable = false;
/* ..stuff.. */
if(variable.booleanValue() == false) {
/* ..more stuff..*/
}
我已经完成了,在不同的地方:
Boolean variable = false;
/* ..my stuff..*/
if(!variable) {
/* ..more of my stuff..*/
}
问题是:第一个代码片段与第一个代码片段的区别/优势是什么?
长版本是:鉴于我可以将 boolean 变量用作原始( boolean )变量,执行 variable.booleanValue() 甚至将其与 boolean 值进行比较有什么意义?如果变量未初始化,这是否也引入了空指针异常的风险(在代码上不可能,但是嘿)?
在什么情况下建议在“变量”之上使用 variable.booleanValue?
最佳答案
两个片段的行为没有区别。
At run time, unboxing conversion proceeds as follows:
If r is a reference of type Boolean, then unboxing conversion converts r into r.booleanValue()
因此 if (variable) {...}
将执行为 if (variable.booleanValue()) {...}
。因为它们是完全等价的,所以如果 variable == null
,它们同样容易受到 NPE 的影响。
这意味着显式调用 booleanValue()
的一个可能的小优势是您可以立即看到 variable
正在被取消引用,而 variable == false
稍微不太明显。
是否添加 == false
或否定是个人喜好问题,我更愿意避免使用 ==
运算符将 boolean 表达式与 进行比较true
或 false
。
但我认为更重要的是完全避免 Boolean
并尽可能使用原始类型。
关于java - Java 上 Boolean.booleanValue 函数的好处或用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594600/