装箱的值将取消装箱,然后立即重新装箱

时间:2012-08-22 05:18:35

标签: java findbugs autoboxing

我收到Findugs错误“盒装值未装箱,然后立即重新装箱”。

这是代码:

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

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

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

3 个答案:

答案 0 :(得分:16)

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

所以在后台:

  1. Long.valueOf(lmt)Long转换为long
  2. emp.setLimit(<long>);再次将long转换为Long
  3. 从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)会将您的lmtLong拆至long,只是为了再次获得Long。正如您所说limitLong,您不需要使用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