FindBugs给我有关以下行的警告,其中invoiceNumber
是Integer
对象:
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
。