装箱就是自动将基本数据类型转换为包装类型(int => Integer);调用方法Integer的valueOf(int)方法
拆箱就是自动将包装类型转换为基本数据类型(Integer => Int;调用Integer方法intValue方法
- 程序块输出结果
public static void main(String[] args) {
//2.java自动装箱、拆箱
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.err.println(i1 == i2);
System.err.println(i3 == i4);
}
输出结果:
true
false
分析:i1和i2指向的是同一个对象,i3和i4指向的是不同的对象。Interger的valueOf方法的具体实现:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
其中IntergerCache类的源码为:
调用Interger的valueOf方法时,如果i在-128到127之间,就会从初始化的cache数组中取出对应的Integer对象;如果不再这个区间,就会执行new Interger(i),创建一个新的对象。
所以i1和i2是从cache数组中取出已经存在的对象,i1和i2指向的是同一个对象,i3和i4指向的是不同的对象。
- 程序块:
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.err.println(i1 == i2);
System.err.println(i3 == i4);
}
输出结果:
false
false`
分析:整数在上述范围内个数是有限的,浮点数不是这样的。