public class Main{
public static void main(String args []){
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//faulse
}
}
上面代码“i==i2”返回true,而“i3==i4”返回faulse,通过分析valueOf()方法,当值为-128到127之间时,返回IntegerCache.cache[i = (-IntegerCache.low)];不在这个区间时,返回 new Integer(i).
IntegerCache 类中会提前就初始化一个Integer数组,范围是-128到127,给i1和i2赋值时,直接返回cache[ ]数组中的对象,属于同一个对象,所以返回true;而200超过了这个范围,直接返回 new Integer(),属于不同对象,返回faulse.
二、
public class Main{
public static void main(String args []){
Double i1 = 100;
Double i2 = 100;
Double i3 = 200;
Double i4 = 200;
System.out.println(i1==i2);//faulse
System.out.println(i3==i4);//faulse
}
}
Double封装类与Integer()类不同,它的valueOf( )是返回一个新的封装类对象,因此“i1 == i2”和“i3 == i4”都返回faulse。