2012-08-22 44 views
3

我收到Findugs錯誤「盒裝值拆箱,然後立即重新裝箱」。將盒裝值拆箱,然後立即重新裝箱

這是代碼:

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

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

在此,僱員limit字段爲Long類型。你能告訴我什麼是錯誤?

+1

是否有一個原因,你使用長和不長的變量和參數?由於限制參數是一個Long,爲什麼不簡單地將'lmt'移到該方法中呢?爲什麼要調用'Long.valueOf(lmg)'? –

回答

3

這是因爲Long.valueOf(long)將從Long拆箱您lmtlong,只是爲了再次得到Long。正如你說,limitLong,你並不需要使用Long.valueOf,只是使用var:

emp.setLimit(lmt); 
15

的問題是,你將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); 

甚至:

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

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

Long.valueOf需要long值,但你傳遞一個Long值 - 強制拆箱。然而,緊接着,Long.valueOf重新設置了該值,表達式再次計算爲Long。 FindBugs檢測到不必要的轉換鏈Long - >long - >Long