什么是自动装箱和自动拆箱
基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 自动装箱是java编译器在java原生类型和对应的对象包装类型上做的自动转换。例如,把int 装换成 Integer double转换成Double等等。如果是反过来转换,那么叫做自动拆箱,也是编译器为我们做的事情。
自动装箱
int a = 10;
Integer b = a;//装箱,相当于编译器自动作以下的编译:Integer b = Integer.valueOf(10);
自动拆箱
Integer b = 10;
int a = b;//拆箱,实际上执行了 int c = b.intValue();
int 的自动装箱,是系统执行了 Integer.valueOf(int i),下面看看Integer.java的源码:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)
下面测试一下:
public static void main(String[] args) {
Integer aa=127;
Integer bb=127;
boolean flag1 = aa==bb;//结果为true
System.out.println(flag1);
Integer cc=129;
Integer dd=129;
boolean flag2 = cc==dd;//结果为false
System.out.println(flag2);
}
运行结果: