将装箱值拆箱,然后重新装箱

2022-09-03 12:53:10

FindBugs向我发出了有关以下行的警告,其中是对象:invoiceNumberInteger

text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));

警告是:“装箱值已取消装箱,然后立即重新装箱”

现在我想我理解(取消)拳击,但我看不出你怎么会在没有得到警告的情况下做同样的事情?

我发现我可以使用以下代码来摆脱警告,但这似乎更冗长:

int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));

有人可以告诉我做上述事情的“正确”方法是什么吗?

顺便说一句,我已经看过相关的问题,我了解它们发生了什么,但这似乎与其中任何一个都不匹配。


答案 1

表达式的类型为 。它需要在不是 的情况下取消装箱。(invoiceNumber == null) ? 0 : invoiceNumber)intinvoiceNumberinvoiceNumbernull

另一方面,期望一个参数后跟引用,这意味着你立即再次被框住。String.formatStringObjectintInteger

您可以尝试通过使用 来避免原始的拆箱,这将使此表达式返回 .(invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)Integer


答案 2

尝试更改为 。我认为警告来自您在“假”情况下再次使用,而不是.(invoiceNumber == null) ? 0 : invoiceNumber(invoiceNumber == null) ? 0 : invoiceNumber.intValue()Integerint


推荐