“方法foo()不必要装箱一个布尔常量”声纳警告

wilx

SonarQube的分析器在Java代码中报告了许多此类消息。

方法foo(String, String)不必要地装一个布尔常量

在许多情况下,它返回的trueBoolean返回类型方法。

我想知道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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决SonarQube中的主要问题“不必要地装一个布尔常量”

TicTacToe游戏中的一个不必要的转弯

React - 尽管程序运行良好,但 useMemo 会发出警告。(useMemo 有一个不必要的依赖)

IDE报告不必要的装箱检查

构造向量时如何消除(一个)不必要的副本?

Eclipse 项目显示一个不必要的项目文件夹,无法删除

为什么 `std::time` 有一个不必要的参数?

C ++填充一个std :: map创建不必要的对象

使用Grunt编译SASS文件会创建一个不必要的文件夹

C# 删除不必要的括号,但只留下一个

我如何跳入另一个菜单而不进行不必要的嵌套?

仅从字符串中删除第一个不必要的字母

有没有一种方法可以在不运行另一个不必要的命令的情况下运行sudo?

为什么is-operator导致不必要的装箱?

我在Netbeans中收到不必要的装箱到Integer

不必要的转义字符警告

Cython发出“不必要的”警告

如何忽略 QToolButton 菜单中的第一个鼠标事件以防止不必要的选择项目

如果存在,如何删除最后一个字符串元素不必要的文本?

从元素中删除不必要的值,并在Python中的列表中创建一个新元素

比较两个整数“不必要拆箱”警告

“预期了一个赋值或函数调用,而是看到了一个表达式。” -不必要的console.log?

我可以添加一个在声纳扫描后显示声纳警告的代码注释吗?

不必要的布尔变量完全更改代码

Laravel updateTimestamps方法不必要的检查?

Java / Eclipse:删除“不必要的@SuppressWarnings”的多个警告

不必要的命名空间的编译器警告

了解gometalinter取消转换不必要的转换警告

我可以让pylint警告不必要的抑制线吗?