基本类型、对象引用都在栈中;而对象本身在堆中
== 基本数据类型比较的是值 对象比较的是地址
基本数据类型与封装类比较会自动拆箱,所以比较的还是值,两个封装类比较的是地址
Equals 比较值
Integer s=
new
Integer(
9
);
(s.equals(9)) , 在进行 equals 比较之前,会对 9 调用 Integer.valueOf 方法,进行自动装箱 , 由于 IntegerCache 中已经存在 9 ,所以,直接返回其引用,引用相同, equals 就自然相同了。所以结果为真。
(s.equals( new Integer(9)) ,直接创建了一个新的 Integer 实例,但且值也为 9 ,所以,满足条件,返回真。