我收到 Findugs 错误“一个装箱的值被取消装箱,然后立即重新装箱”。
这是代码:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,Employeelimit字段的类型为Long。你能告诉我错误是什么吗?
我收到 Findugs 错误“一个装箱的值被取消装箱,然后立即重新装箱”。
这是代码:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,Employeelimit字段的类型为Long。你能告诉我错误是什么吗?
问题是您正在转换Long-> long-> Long。
所以在后台:
Long.valueOf(lmt)转换Long为longemp.setLimit(<long>); 再次转换long为Long从 Java 5 开始自动装箱 => 您的代码应如下所示:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(lmt);
甚至:
Employee emp = new Employee()
long lmt = 123L;
emp.setLimit(lmt);
发生这种情况是因为Long.valueOf(long)会将您的lmtfrom Longto拆箱long,只是为了Long再次获得。正如你所说limit的那样Long,你不需要使用Long.valueOf,只需使用var:
emp.setLimit(lmt);
emp.setLimit(Long.valueOf(lmt));
Long.valueOf接受一个long值,但你传递一个Long值——强制拆箱。然而,紧接着,Long.valueOf重新装箱该值并且表达式Long再次计算为 a。FindBugs 检测到不必要的转换链Long-> long-> Long。