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

时间:2014-05-21 13:10:10

标签: java object reference

您好我正在修改并理解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);
    }
}

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

3 个答案:

答案 0 :(得分:16)

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

来自JLS 15.21.1

  

<强> 15.21.1。数值等式算子==和!=

     

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

答案 1 :(得分:0)

double不是引用,因为它是基本类型。这是一个价值。 Double可能是一个参考。

当您编写z == w,其中zdouble - 已键入且wInteger - 类型时,运行时必须比较某些内容。而且,显然,它必须比较同类的东西。它不会将double值与Integer引用进行比较。相反,它会将Integer取消装箱,并将取消装箱后获得的int值与double值进行比较。两者都是1,布尔运算符将返回true

答案 2 :(得分:0)

此处不会比较对象,但会将primitive类型与feature的拆箱Integer进行比较。