我收到Findugs错误“盒装值未装箱,然后立即重新装箱”。
这是代码:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,员工limit
字段的类型为Long
。你能告诉我这是什么错误吗?
答案 0 :(得分:16)
问题在于您正在转换Long
- > long
- > Long
。
所以在后台:
Long.valueOf(lmt)
将Long
转换为long
emp.setLimit(<long>);
再次将long
转换为Long
从Java 5开始,自动装箱发生=&gt;您的代码应如下所示:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(lmt);
甚至:
Employee emp = new Employee()
long lmt = 123L;
emp.setLimit(lmt);
答案 1 :(得分:3)
之所以发生这种情况,是因为Long.valueOf(long)
会将您的lmt
从Long
拆至long
,只是为了再次获得Long
。正如您所说limit
是Long
,您不需要使用Long.valueOf
,只需使用var:
emp.setLimit(lmt);
答案 2 :(得分:1)
emp.setLimit(Long.valueOf(lmt));
Long.valueOf
获取long
值,但您传递Long
值 - 强制取消装箱。然而,紧接着,Long.valueOf
重新设置了值,表达式再次评估为Long
。 FindBugs检测到不必要的转换链Long
- &gt; long
- &gt; Long
。