盒装价值拆箱然后重新装箱

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