FindBugs给我有关以下行的警告,其中invoiceNumberInteger对象:

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

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

现在,我认为我了解(取消)装箱,但是如果没有收到警告,我看不到您将如何做同样的事情?

我发现我可以改用以下代码来摆脱警告,但这似乎更加漫长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));

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

顺便说一句,我已经看了相关的问题,并且我理解了这些问题是怎么回事,但这似乎与这些问题都不匹配。

最佳答案

(invoiceNumber == null) ? 0 : invoiceNumber)表达式的类型是int。如果invoiceNumber不是invoiceNumber,则需要将null拆箱。

另一方面,String.format需要一个String参数,后跟Object引用,这意味着您的int立即被立即装箱到Integer

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

09-27 02:00