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)
表达式为
整数
。如果 invoiceNumber
不是 null
,则需要对 invoiceNumber
进行拆箱。
另一方面,String.format
需要一个 String
参数,后跟 Object
引用,这意味着您的 int
再次立即装箱为 Integer
。
您可以尝试使用 (invoiceNumber == null) 来避免原始拆箱吗? Integer.valueOf(0) : invoiceNumber)
,这将使该表达式返回一个 Integer
。
关于java - 盒装值(value)拆箱然后重新装箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32042957/