我有这段代码:
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/