自动装箱拆箱是JDK1.5出现的新特性,主要的目的是方便封装类和基本类型之间的转化,该特性允许基本数据类型之间直接相互赋值.
下面看一段代码:
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer obj = 3;
System.out.println(obj+3);
Integer i1 = 12;
Integer i2 = 12;
Integer i3 =128;
Integer i4 =128;
System.out.println(i3==i4);
System.out.println(i1==i2);
}
}
输入结果为: 5
false
true
下面进行解释代码中obj为Integer类型,为一个引用类型,把obj赋值为3时,编译器自动把基本数据类型int类型的3装箱成Integer类型,然后赋给了obj,在System.out.println(obj+3);语句中,编译器又把obj自动拆箱为基本数据类型int类型,和3相加,
Integer i1 = 12;
Integer i2 = 12;
Integer i3 =128;
Integer i4 =128;
System.out.println(i3==i4);
System.out.println(i1==i2);}
至于这几段代码
对于基本类型的整数,要装箱成Integer对象的时候,如果这个数字在一个字节之内,即-128~127之间,一旦封装成Integer对象,就会把这个值缓存在一个池内,再装入一个对象时,会看这个池里有没有,有的话就直接把地址值赋给新装入的对象,否则new一个新对象,这样比较节省内存空间,感觉小的整数出现的频率会高一点,大家都会使用到,就把这个共享了,这就是所谓的享元模式,即当对象很小,很多个地方又会用到这个对象,需要整出很多个这样的对象来,但是弄出来那么多的对象是使用时是一模一样的,这时候就可以搞一个这样的对象,然后大家都使用这个对象,节省了内存空间,这一点和String在内存中的存放规则是类似的。