11

我收到 Findugs 错误“一个装箱的值被取消装箱,然后立即重新装箱”。

这是代码:

Employee emp = new Employee()
Long lmt = 123L;

emp.setLimit(Long.valueOf(lmt)); 

在此,Employeelimit字段的类型为Long。你能告诉我错误是什么吗?

4

3 回答 3

22

问题是您正在转换Long-> long-> Long

所以在后台:

  1. Long.valueOf(lmt)转换Longlong
  2. emp.setLimit(<long>); 再次转换longLong

从 Java 5 开始自动装箱 => 您的代码应如下所示:

Employee emp = new Employee()
Long lmt = 123L;

emp.setLimit(lmt); 

甚至:

Employee emp = new Employee()
long lmt = 123L;

emp.setLimit(lmt); 
于 2012-08-22T05:23:53.393 回答
4

发生这种情况是因为Long.valueOf(long)会将您的lmtfrom Longto拆箱long,只是为了Long再次获得。正如你所说limit的那样Long,你不需要使用Long.valueOf,只需使用var:

emp.setLimit(lmt); 
于 2012-08-22T05:22:47.670 回答
1
emp.setLimit(Long.valueOf(lmt));

Long.valueOf接受一个long值,但你传递一个Long值——强制拆箱。然而,紧接着,Long.valueOf重新装箱该值并且表达式Long再次计算为 a。FindBugs 检测到不必要的转换链Long-> long-> Long

于 2012-08-22T05:25:33.970 回答