SonarQube的分析器在Java代码中报告了许多此类消息。
方法
foo(String, String)
不必要地装一个布尔常量
在许多情况下,它返回的true
是Boolean
返回类型方法。
我想知道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
如您所见,有一个方法调用可以Boolean
从常量1创建一个。
如果现在将代码更改为:
Boolean foo(String s) {
return Boolean.TRUE;
}
生成的字节码为:
GETSTATIC java/lang/Boolean.TRUE : Ljava/lang/Boolean;
ARETURN
这将获取一个静态常量并返回它应该更有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句