🤔问题
SonarQube的分析器在Java代码中报告了许多此类消息.
Method xxx() needlessly boxes a boolean constant
在许多情况下,对于布尔返回类型方法,它返回true.
我想知道2017年Oracle Java 8在什么程度上(性能?)问题?它真的会最终创建新的Boolean实例,还是会自动神奇地优化为Boolean.TRUE?
更新
声纳规则关键是FB-的contrib:NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION.
🙋最佳答案
此问题背后的原因是,您无缘无故调用了一种方法.我们如何验证这一点:
让我们来看看这个(复杂的;)代码
Boolean foo(String s) {
return true;
}
可以做的就是对此进行反编译.这为我们提供了以下字节码指令(为简便起见,简化了一点)
ICONST_1
INVOKESTATIC java/lang/Boolean.valueOf (Z)Ljava/lang/Boolean;
ARETURN
如您所见,有一个方法调用从常量1创建一个布尔值.
如果现在将代码更改为:
Boolean foo(String s) {
return Boolean.TRUE;
}
生成的字节码为:
GETSTATIC java/lang/Boolean.TRUE : Ljava/lang/Boolean;
ARETURN
这将获取一个静态常量并返回它应该更有效.