在判断两个Intger对象是否相等的时候我们一般都是使用equals()方法
来比较是否相等,用==则是比较两个对象的地址是否相等,而两个Integer的值在[-128, 127] 之间的时候,可以直接通过==
来比较是否相等。那么为什么[-128, 127] 之间的Integer可以直接用==
呢?
public class Demo {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
System.out.println(i1 == i2); //输出true
i1 = 1000;
i2 = 1000;
System.out.println(i1 == i2); //输出false
}
}
这要从Integer的自动装箱说起。当给一个Intger对象赋常量值的时候,编译器会帮我们自动装箱,会把常量值包装成一个对象,而包装成对象是调用了Integer.valueOf()方法,这个时候我们看看Integer.valueOf()方法做了什么。
可以在方法描述上看见,该方法会将传入的int值包装成Integer对象返回,这个方法默认会缓存-128到127的值。这就意味着当我们赋予一个Integer对象常量值的时候,会调Integer.valueOf()方法返回一个Integer对象,而[-128,127]中的值,使用Integer.valueOf() 方法不会创建新的Integer对象,而是从缓存中获取,所以就是返回ide同一对象,所以可以使用==比较。