Java的自动装箱与自动拆箱
基本数据类型的自动装箱、拆箱是自Java 5开始提供的功能。
基本数据类型的自动装箱功能:
我们创建一个类的对象实例的时候:
Class a = new Class(parameter);
当我们创建一个Integer对象时,却可以这样:
Integer i = 100;
实际上,执行上代码的时候,执行了:
Integer i = Integer.valueOf(100);
自动拆箱是将对象中的基本数据从对象中自动取出:
Integer i = 10; //装箱 int t = i; //拆箱,实际上执行了 int t = i.intValue();
值得注意的地方:
Integer的自动装箱
//在-128~127 之外的数
Integer i1 =200;
Integer i2 =200;
System.out.println("i1==i2: "+(i1==i2));
// 在-128~127 之内的数
Integer i3 =100;
Integer i4 =100;
System.out.println("i3==i4: "+(i3==i4));
输出结果:
i1==i2: false i3==i4: true
原因:(Integer源码)
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); //不在范围内返回的是新的对象 }