java - 盒装值(value)拆箱然后重新装箱

标签 java findbugs boxing unboxing

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/

相关文章:

java - 使用 spring ExceptionHandler 时,声纳违规未检查/未确认的异常转换

java - 写入静态字段 - 在这种情况下 FindBugs 是错误的吗?

c# - 避免在通用类中装箱和拆箱

java - 正在进行多少次拆箱?

java - 找不到合适的主类,请加个 'mainClass'属性,Spring boot

java - 如何将 java 程序包装到单个 exe 文件中,包括像 bouncycaSTLe 这样的签名 jar

java - FindBugs 不关心 InputStreams

c# - object[] 是否装箱

java - 如何在不知道尺寸的情况下使用从文件中获取的数据加载 Java 中的 N_by_M 矩阵?

java - 某个 z 深度处的 xy 位置