- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
SonarQube 的分析器在我们的 Java 代码中报告了一堆这样的消息。
Method
foo(String, String)
needlessly boxes a boolean constant
在许多情况下,它为 Boolean
返回类型方法返回 true
。
我想知道 2017 年 Oracle Java 8 的(性能?)问题到什么程度?它真的最终会创建新的 Boolean
实例,还是会神奇地自动优化为 Boolean.TRUE
?
更新
Sonar 规则键是 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
。
如果我们现在将代码更改为:
Boolean foo(String s) {
return Boolean.TRUE;
}
生成的字节码是:
GETSTATIC java/lang/Boolean.TRUE : Ljava/lang/Boolean;
ARETURN
获取一个静态常量并返回它应该更有效。
关于java - "Method foo() needlessly boxes a boolean constant" Sonar 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45883075/
我正在使用 Tomcat Maven plugin将我的 war 部署到 Tomcat。当我运行时 mvn tomcat:redeploy 我注意到打包目标总是被执行,即使它已经运行并且没有进行任何更
我碰巧是 Ruby Inside 的订阅者,因为我对 Rails 尤其感兴趣。昨天,Rails 的创建者 David Heinemeier Hansson 几乎说他只是在使用测试/单元。我会理解这一点
我的项目中有这个方法: private static boolean isNAND(boolean value1, boolean value2) { return value1 ?
SonarQube 的分析器在我们的 Java 代码中报告了一堆这样的消息。 Method foo(String, String) needlessly boxes a boolean constan
我是一名优秀的程序员,十分优秀!