您好我正在修改并理解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对象具有相同的引用?无法理解这一点。谢谢你的阅读!
答案 0 :(得分:16)
如果使用==
运算符比较基元和包装器,则包装器值将被取消装箱并与原始值进行比较。
<强> 15.21.1。数值等式算子==和!=
如果等于运算符的操作数都是数字类型,或者 一个是数字类型,另一个是可转换的(§5.1.8) 数字类型,对操作数执行二进制数字提升 (§5.6.2)。
答案 1 :(得分:0)
double
不是引用,因为它是基本类型。这是一个价值。 Double
可能是一个参考。
当您编写z == w
,其中z
为double
- 已键入且w
为Integer
- 类型时,运行时必须比较某些内容。而且,显然,它必须比较同类的东西。它不会将double
值与Integer
引用进行比较。相反,它会将Integer
取消装箱,并将取消装箱后获得的int
值与double
值进行比较。两者都是1,布尔运算符将返回true
。
答案 2 :(得分:0)
此处不会比较对象,但会将primitive
类型与feature
的拆箱Integer
进行比较。