[英]Why Integer.valueOf cannot parse the hex string back to integer
[英]Findbugs issue with “Boxing/unboxing to parse a primitive” with Integer.valueOf(String)
我有这段代码:
public void someMethod(String id) {
someOtherMethod(Integer.valueOf(id));
}
public void someOtherMethod(int id) {
// do something with id
}
在第二行,Findbugs抛出了这个异常:
用于解析基元的装箱/拆箱
当我只是调用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和它所帮助的工具指出的一类不必要的装箱转换之一。
我花了一段时间来计算出一个(部分是因为Jenkins只是说“装箱/拆箱来解析一个原语”),但显然问题/解决方案是在Integer.valueOf()内部做的,即:
Integer.valueOf(parseInt(s, 10));
因此,解决方案是直接调用parseInt():
someOtherMethod(Integer.parseInt(id));
可以在findbugs页面上找到问题的详细描述(DM_BOXED_PRIMITIVE_FOR_PARSING)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.