比较两个整数'不必要的拆箱'警告

时间:2016-11-08 08:11:19

标签: java

我尝试以下一种方式比较整数(对于我的情况,这很好):

public void compareMayNull(Integer a, Integer b) {
    if ((a == null ? -1 : a.intValue()) == b.intValue())
        System.out.println("true");
}

IntelliJ IDEA在a.intValue()b.intValue()上向我发出警告“不必要的拆箱”,并建议我将代码简化为:

public void compareMayNull(Integer a, Integer b) {
    if ((a == null ? -1 : a) == b)
        System.out.println("true");
}

但是我有点困惑,因为如果a != null不是我所知道的最佳实践,那么将会比较参考文献。我应该使用什么代码?

2 个答案:

答案 0 :(得分:5)

由于您的-1 字面int类型,a自动取消装箱,(如果并且只有在a == nullfalse时,其他表达式才会被评估)在评估三元条件时

a == null ? -1 : a;

然后,由于此表达式的类型为intb也是自动取消装箱

因此,您可以安全地编写if ((a == null ? -1 : a) == b),因为Java会自动将ab解包。因此,通过调用intValue()显式取消装箱是多余的,您的IDE会警告您这一点。为避免疑问,在评估表达式a时,a == null 自动取消装箱。

我个人认为这是Java中最有害的部分之一。我会认真考虑按照原来的方式编写它,并告诉你的IDE吮吸它。

答案 1 :(得分:-1)

compareMayNull(Integer a, Integer b) 

应该做的不仅仅是返回void ...

也许一个int就可以了,所以你可以做到

(a == null ? -1 : a.compareTo(b)