A boxed value is unboxed and then immediately reboxed
Asked Answered
C

3

11

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?

Capacity answered 22/8, 2012 at 5:18 Comment(1)
Is there a reason that you're using Long and not long variables and parameters? Since the limit parameter is a Long, why not simply pas lmt into the method? Why call Long.valueOf(lmg)?Babara
B
22

The problem is that you're converting Long -> long -> Long.

So in the background:

  1. Long.valueOf(lmt) converts Long to long
  2. emp.setLimit(<long>); converts long to Long again

As 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); 
Burkes answered 22/8, 2012 at 5:23 Comment(0)
B
4

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); 
Balthasar answered 22/8, 2012 at 5:22 Comment(0)
L
1
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.

Ligament answered 22/8, 2012 at 5:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.