gpt4 book ai didi

java - "Method foo() needlessly boxes a boolean constant" Sonar 警告

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:57 32 4
gpt4 key购买 nike

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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com