FindBugs给出了关于以下行的警告,其中invoiceNumber
是Integer
对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
警告是:"盒装值未装箱,然后立即重新装箱"
现在我觉得我理解(联合国)拳击比赛,但我不知道如何在没有得到警告的情况下做同样的事情?
我发现我可以使用以下代码取消警告,但这看起来更啰嗦:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
有人能告诉我什么是正确的'如何做到这一点?
顺便说一句,我已经查看了相关的问题,我了解他们发生了什么,但这似乎与其中任何一个都没有匹配。答案 0 :(得分:22)
(invoiceNumber == null) ? 0 : invoiceNumber)
表达式的类型是
int
。如果invoiceNumber
不是invoiceNumber
,则需要取消装箱null
。
另一方面,String.format
需要一个String
参数后跟Object
引用,这意味着您的int
会立即重新加入Integer
。
您可以尝试使用(invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)
来避免原始拆箱,这会使此表达式返回Integer
。
答案 1 :(得分:1)
尝试将(invoiceNumber == null) ? 0 : invoiceNumber
更改为(invoiceNumber == null) ? 0 : invoiceNumber.intValue()
。我认为警告来自你在" false"中再次使用Integer
。 case,而不是int
。