盒装价值拆箱然后重新装箱
Boxed value unboxed then reboxed
FindBugs 向我发出有关以下行的警告,其中 invoiceNumber
是一个 Integer
对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
警告是:"Boxed value is unboxed and then immediately reboxed"
现在我想我理解了(取消)装箱,但我不明白你如何在没有得到警告的情况下做同样的事情?
我发现我可以改用下面的代码来消除警告,但这似乎更冗长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
有人可以告诉我执行上述操作的 'correct' 方法是什么吗?
顺便说一句,我已经查看了相关问题并且我了解它们发生了什么,但这似乎与其中任何一个都不匹配。
尝试将 (invoiceNumber == null) ? 0 : invoiceNumber
更改为 (invoiceNumber == null) ? 0 : invoiceNumber.intValue()
。我认为警告来自您在 "false" 情况下再次使用 Integer
,而不是 int
.
(invoiceNumber == null) ? 0 : invoiceNumber)
表达式的类型是
int
。如果 invoiceNumber
不是 null
.
,则需要对 invoiceNumber
进行拆箱
另一方面,String.format
需要单个 String
参数后跟 Object
引用,这意味着您的 int
会立即装箱到 Integer
再次.
您可以尝试使用 (invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)
来避免原始拆箱,这会使该表达式 return 成为 Integer
。
FindBugs 向我发出有关以下行的警告,其中 invoiceNumber
是一个 Integer
对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
警告是:"Boxed value is unboxed and then immediately reboxed"
现在我想我理解了(取消)装箱,但我不明白你如何在没有得到警告的情况下做同样的事情?
我发现我可以改用下面的代码来消除警告,但这似乎更冗长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
有人可以告诉我执行上述操作的 'correct' 方法是什么吗?
顺便说一句,我已经查看了相关问题并且我了解它们发生了什么,但这似乎与其中任何一个都不匹配。
尝试将 (invoiceNumber == null) ? 0 : invoiceNumber
更改为 (invoiceNumber == null) ? 0 : invoiceNumber.intValue()
。我认为警告来自您在 "false" 情况下再次使用 Integer
,而不是 int
.
(invoiceNumber == null) ? 0 : invoiceNumber)
表达式的类型是
int
。如果 invoiceNumber
不是 null
.
invoiceNumber
进行拆箱
另一方面,String.format
需要单个 String
参数后跟 Object
引用,这意味着您的 int
会立即装箱到 Integer
再次.
您可以尝试使用 (invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)
来避免原始拆箱,这会使该表达式 return 成为 Integer
。