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

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不是我所知的最佳实践,则将对引用进行比较。我应该使用什么代码?

最佳答案

因为您具有-1类型的int文字,所以a将自动拆箱(如果且仅当a == nullfalse时,否则不对表达式进行求值)
a == null ? -1 : a;
然后,由于此表达式的类型为int,因此b也会自动取消装箱。

因此,您可以编写if ((a == null ? -1 : a) == b),这很安全,因为Java会自动将ab都拆箱。因此,通过调用intValue()进行的显式拆箱是多余的,并且IDE会警告您。为避免疑问,在对表达式a求值时,a == null而不是自动取消装箱。

我个人认为这是Java最有害的部分之一。我会认真考虑以您最初拥有它的方式编写它,并告诉您的IDE吸收它。

关于java - 比较两个整数“不必要的拆箱”警告,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40481925/

10-10 09:36