java - Findbugs 问题与 "Boxing/unboxing to parse a primitive"和 Integer.valueOf(String)

标签 java findbugs boxing unboxing

我有这段代码:

public void someMethod(String id) {
   someOtherMethod(Integer.valueOf(id));
}

public void someOtherMethod(int id) {
   // do something with id
}

在第二行,Findbugs 抛出了这个异常:

Boxing/unboxing to parse a primitive

当我只是调用 Integer.valueOf() 时,为什么 Findbugs 会提示这个/我该如何解决这个问题?

最佳答案

问题在于 Integer.valueOf返回一个 Integer,而不是 int,但您的 someOtherMethod 需要一个 int。 Findbugs 基本上是在警告您,您正在以一种冗长的方式进行操作,其中可能会创建一个您不需要的对象(Integer),然后您将立即通过传递来拆箱它到 someOtherMethod(int),例如:

String => int => Integer => int
          ^^^^^^^^^^^^^^
                \--- This is inside Integer.valueOf

相反,您可以并且可能应该避免通过 Integer 进行不必要的往返,只需执行以下操作:

String => int
^^^^^^^^^^^^^
      \--- Integer.parseInt

不需要临时的 Integer 和潜在的内存分配等。

如果 someOtherMethod 期待 Integer,您不会收到警告,因为 Integer 并非纯粹是临时的。

这只是 Findbugs 和类似工具有用地指出的一类不必要的装箱转换。

关于java - Findbugs 问题与 "Boxing/unboxing to parse a primitive"和 Integer.valueOf(String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32516893/

相关文章:

java - Collection.toArray() 方法,详细信息

java - Play 框架主代码未获取

java - findbugs 无法检测到 NumberFormatException

c# - 使用 out 和 ref 参数时的装箱和拆箱

java - 调用方法时进行装箱

java - feed方法java if语句

java - 记录到命令窗口?

findbugs - 我如何在 netbeans 11.3 中安装 findbugs

java - 如何抑制findbugs中keySet迭代器而不是entrySet迭代器的低效使用?

c# - 在 C# 中使用 "Type"对象类型转换对象