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

Sri*_*san 6 java autoboxing findbugs

我收到Findugs错误"盒装值未装箱然后立即重新装箱".

这是代码:

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

emp.setLimit(Long.valueOf(lmt)); 
Run Code Online (Sandbox Code Playgroud)

在此,Employee limit字段是类型Long.你能告诉我这是什么错误吗?

Pet*_*vic 17

问题是你正在转换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); 
Run Code Online (Sandbox Code Playgroud)

甚至:

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

emp.setLimit(lmt); 
Run Code Online (Sandbox Code Playgroud)


jpk*_*ing 4

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

emp.setLimit(lmt); 
Run Code Online (Sandbox Code Playgroud)