Dun*_*ear 14 java boxing unboxing findbugs
FindBugs给我一个关于以下行的警告,其中invoiceNumber是一个Integer对象:
text.append(String.format("%010d-", (invoiceNumber == null) ? 0 : invoiceNumber));
Run Code Online (Sandbox Code Playgroud)
警告是:"盒装值未装箱,然后立即重新装箱"
现在我觉得我理解(联合国)拳击,但我看不出你怎么会在没有得到警告的情况下做同样的事情?
我发现我可以使用以下代码来消除警告,但这似乎更加冗长:
int invNo = (invoiceNumber == null) ? 0 : invoiceNumber;
text.append(String.format("%010d-", invNo));
Run Code Online (Sandbox Code Playgroud)
有人能告诉我上面做的"正确"方法是什么吗?
顺便说一下,我已经看了相关的问题,我理解他们发生了什么,但这似乎与其中任何一个都不匹配.
Era*_*ran 24
(invoiceNumber == null) ? 0 : invoiceNumber)表达式的类型是
int.它要求拆箱invoiceNumber的情况invoiceNumber不是null.
另一方面,String.format期望一个String参数后跟Object引用,这意味着你的intget会立即Integer再次装箱.
您可以尝试通过使用避免原始拆箱(invoiceNumber == null) ? Integer.valueOf(0) : invoiceNumber),这将使此表达式返回Integer.
| 归档时间: |
|
| 查看次数: |
4574 次 |
| 最近记录: |