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

标签 java boolean wrapper primitive

所以,我看到了这行代码:

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?

最佳答案

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

JLS 5.1.8 :

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 表达式与 进行比较truefalse

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

关于java - Java 上 Boolean.booleanValue 函数的好处或用途?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594600/

相关文章:

c - 为什么 bool isFull 不更新为 false?

c# - boolean 语法的性能和优雅问题

PHP:标准输出与 php://STDOUT

Java RMI 类转换异常

java - 测量 Python 和 Java 实现之间的性能差异?

java - 远程执行shell脚本时找不到"readOnly"等符号

java - SWF Flash Uploader 使 JSESSIONID 无效。有想法从服务器端或客户端恢复 session 吗?

border - 在顶部复制底部的盒子阴影

java - 单独存储 YEAR 的包装数据类型