包装类的缓存问题
整型,char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,从而提高效率
缓存的原理是:如果数据在-128到127这个区间内,则在类加载的时候就已经为该区间内的每个数值创建了对象,并且把这256个对象都放在一个叫cahce的数组中
源码如下
public static Integer valueOf(int i){
if(i>=IntegerCache.low && i<=IntegerCache.high)
return Integer.cache[i+(-IntegerCache.low)];
return new Integer(i);
}
也就是说,如果数据在该区间内,则会之间获取数组中对应的包装类对象的引用,如果不再该区间内,则要通过new来调用包装类的构造方法创建一个对象
示例代码
//包装类的缓存问题
Integer a1 = Integer.valueOf(123);
Integer b1 = Integer.valueOf(123);
System.out.println(a1==b1);
System.out.println(a1.equals(b1));
System.out.println("############");
Integer a2 = Integer.valueOf(-129);
Integer b2 = Integer.valueOf(-129);
System.out.println(a2==b2);
System.out.println(a2.equals(b2));
结果
true
true
############
false
true
拜了个拜!