Reputation: 12040
I am getting the Findugs error "A boxed value is unboxed and then immediately reboxed".
This is the Code:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
In this, Employee limit
field is of type Long
. Could you please let me know what is the error?
Upvotes: 11
Views: 21961
Reputation: 12179
The problem is that you're converting Long
-> long
-> Long
.
So in the background:
Long.valueOf(lmt)
converts Long
to long
emp.setLimit(<long>);
converts long
to Long
againAs of Java 5 autoboxing happens => your code should look like this:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(lmt);
or even:
Employee emp = new Employee()
long lmt = 123L;
emp.setLimit(lmt);
Upvotes: 22
Reputation: 114797
emp.setLimit(Long.valueOf(lmt));
Long.valueOf
takes a long
value, but you pass a Long
value -- mandating unboxing. Immediately afterward, however, Long.valueOf
re-boxes the value and the expression evaluates to a Long
again. FindBugs detects the unnecessary conversion chain Long
-> long
-> Long
.
Upvotes: 1
Reputation: 14061
That happens because Long.valueOf(long)
will unbox your lmt
from Long
to long
, just to get a Long
again. As you said that limit
is a Long
, you don't need to use Long.valueOf
, just use the var:
emp.setLimit(lmt);
Upvotes: 4