Java - 这两个对象如何相互平等?

May*_*ron 1 java reference object

嗨,我正在修改并理解equals()和'=='之间的区别,但是这段代码真让我困惑:

public class MyTest {
    public static void main(String[] args) {
        Integer w = new Integer(1);
        Integer x = 1;
        double z = x;
        System.out.println(z == w);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用'=='时,double对象如何与内存中的Integer对象具有相同的引用?无法理解这一点.谢谢你的阅读!

Abi*_*san 16

如果使用==运算符比较基元和包装器,则包装器值将被取消装箱并与原始值进行比较.

来自JLS 15.21.1

15.21.1.数值等式算子==和!=

如果等于运算符的操作数都是数字类型,或者一个是数字类型而另一个是可转换的(第5.1.8节)为数字类型,则对操作数执行二进制数字提升(第5.6.2节).

  • @MironBalcerzak它与Integer缓存无关(顺便说一下w没有缓存,它是一个全新的整数). (2认同)