Java 自动装箱和使用运算符比较对象

Ayu*_*ain 2 java comparison autoboxing integer

当数值比较运算符用于比较 Java 中的 2 个整数对象时,我试图了解以下代码的行为。

    Integer i1 = new Integer(1);
    Integer i2 = new Integer(1);
    System.out.println(i1 == i2);
    System.out.println(i1 > i2);
    System.out.println(i1 >= i2);
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是:

false
false
true
Run Code Online (Sandbox Code Playgroud)

我理解在第一种情况下发生的事情(对象实例的比较是这样的,这就是它给出错误的原因)。但是为什么第二个和第三个场景不同,它究竟是如何工作的呢?

ali*_*iee 6

因为<, >, >=, 和<=是数值比较,因此编译器知道它必须进行拆箱。

但是,==并且!=始终用作非原始类型的参考比较器。