FindBugs向我发出了关于以下行的警告,其中invoiceNumber是Integer对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));警告是:“取消装箱值,然后立即重新装箱”。
现在我想我懂拳击了,但是我看不出你在没有得到警告的情况下怎么做同样的事情?
我发现可以使用以下代码来消除警告,但这似乎更长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));有人能告诉我做上述事情的正确方法是什么吗?
顺便说一句,我已经看过相关的问题了,我明白它们是怎么回事,但这似乎不符合其中的任何一个问题。
发布于 2015-08-17 04:54:27
(invoiceNumber == null) ? 0 : invoiceNumber)表达式的类型是int。在invoiceNumber不是null的情况下,它需要取消对null的装箱。
另一方面,String.format需要一个单独的String参数,后面跟着Object引用,这意味着您的int立即再次被装箱到Integer。
您可以尝试使用(invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber)来避免原始的取消装箱,这将使这个表达式返回一个Integer。
https://stackoverflow.com/questions/32042957
复制相似问题