11

Findugs エラー "A boxed value is unboxed and then reboxed" が表示されます。

これはコードです:

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

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

この場合、Employeelimitフィールドの型はLongです。エラーの内容を教えてください。

4

3 に答える 3

22

問題は、変換していることですLong-> long-> Long

したがって、バックグラウンドで:

  1. Long.valueOf(lmt)に変換Longしますlong
  2. 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); 
于 2012-08-22T05:23:53.393 に答える
4

これは、 が を から にアンボックスし、 を再度取得するためにLong.valueOf(long)発生します。あなたが言ったように、を使用する必要はありません。var を使用するだけです。lmtLonglongLonglimitLongLong.valueOf

emp.setLimit(lmt); 
于 2012-08-22T05:22:47.670 に答える
1
emp.setLimit(Long.valueOf(lmt));

Long.valueOf値を取りますが、long値を渡しLongます -- ボックス化解除を強制します。ただし、その直後にLong.valueOf値が再ボックス化され、式はLong再び a に評価されます。FindBugs は不要な変換チェーンLong-> long->を検出しLongます。

于 2012-08-22T05:25:33.970 に答える