我收到Findugs錯誤「盒裝值拆箱,然後立即重新裝箱」。將盒裝值拆箱,然後立即重新裝箱
這是代碼:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,僱員limit
字段爲Long
類型。你能告訴我什麼是錯誤?
我收到Findugs錯誤「盒裝值拆箱,然後立即重新裝箱」。將盒裝值拆箱,然後立即重新裝箱
這是代碼:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(Long.valueOf(lmt));
在此,僱員limit
字段爲Long
類型。你能告訴我什麼是錯誤?
這是因爲Long.valueOf(long)
將從Long
拆箱您lmt
到long
,只是爲了再次得到Long
。正如你說,limit
是Long
,你並不需要使用Long.valueOf
,只是使用var:
emp.setLimit(lmt);
的問題是,你將Long
- >long
- >Long
。
所以在背景:
Long.valueOf(lmt)
轉換Long
到long
emp.setLimit(<long>);
轉換long
到Long
再次由於Java 5的自動裝箱的發生=>你的代碼應該是這樣的:
Employee emp = new Employee()
Long lmt = 123L;
emp.setLimit(lmt);
甚至:
Employee emp = new Employee()
long lmt = 123L;
emp.setLimit(lmt);
emp.setLimit(Long.valueOf(lmt));
Long.valueOf
需要long
值,但你傳遞一個Long
值 - 強制拆箱。然而,緊接着,Long.valueOf
重新設置了該值,表達式再次計算爲Long
。 FindBugs檢測到不必要的轉換鏈Long
- >long
- >Long
。
是否有一個原因,你使用長和不長的變量和參數?由於限制參數是一個Long,爲什麼不簡單地將'lmt'移到該方法中呢?爲什麼要調用'Long.valueOf(lmg)'? –