通常,Java中的相等运算符执行所谓的浅表比较。换句话说,它比较变量包含的值。现在,原始数据类型的变量包含值本身,而引用类型包含对存储实际内容的堆区域的引用。这意味着在您的代码段
intb中将保留值
1,
Integer a并将保留堆上实际Integer对象的内存地址。
现在,在您提供的特定示例中,只有一种说法。整数类一个特殊的包装器类,用于包装原始整数类型。编译器可以在此类包装对象和原始类型之间自动转换(称为装箱和拆箱)。
让我们一步一步地使您的代码清晰明了。
Integer a = 1;
编译器实际上替换了此行插入的以下代码:
Integer a = Integer.valueOf(1);
静态方法
valueOf返回一个包装对象实例,该实例包装提供的原始值。当编译器从原始类型构造包装类时,此过程称为装箱。
使用此类包装器对象时,使用相等运算符将其与原始变量进行比较
a == b
编译器实际上将其更改为以下内容:
a.intValue() == b;
其中
intValue返回由包装对象包装的原始值(称为拆箱),即,将原始值拆箱,并使表达式等效于比较两个原始。这就是为什么相等运算符随后返回的原因
true



