Integer m = 1; //自动装箱
Integer n = 1; //自动装箱
System.out.println( m == n ); //true
Integer x = 128; //自动装箱
Integer y = 128; //自动装箱
System.out.println( m == n ); //false
我们知道,Integer是一个包装类,对与类类型的数据,使用“==”进行比较的时候,比较的是左右两个等式的地址值,例子中,m和n赋的值都是1,在方法区中,因为值相同,所以m和n实际指向的地址是同一个,因此用 “==”来比较的时候,结果为true。
但为什么第二个结果是false呢?是因为Integer内部定义了一个IntegerCache方法,对于 -128 ~ 127 之间的整数,直接使用自动装箱的方式,当不在这个范围内时,则会使用new的方式重新在内存中建一个堆内存,此时存放在方法区的两个128地址值是不一样的,因此比较时结果为false。