Java拆箱与装箱
装箱就是自动将基本数据类型转换为包装器类型;
拆箱就是自动将包装器类型转换为基本数据类型;
有了装箱拆箱,java可以根据上下文,自动进行转换,极大的简化相关编程。
public static void main(String[] args){
Integer a1 = 200;//装箱
int b1 = 200;//拆箱
Integer a2 = 100;
Integer b2 = 100;
Integer a3 = 200;
Integer b3 = 200;
System.out.println(a1==b1);//true
System.out.println(a2==b2);//true
System.out.println(a3==b3);//false
}
在装箱的时候自动调用的是Integer的valueOf(int)方法。
而在拆箱的时候自动调用的是Integer的intValue方法。
在源码 IntegerCache
类中:
在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用,否则创建一个新的Integer对象,所以第三个是false。
Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。

注意
Double、Float 的 valueOf 方法的实现是类似的。
在这里只解释一下为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。
public static void main(String[] args){
Double a1 = 200.00;
double b1 = 200.00;
Double a2 = 100.00;
Double b2 = 100.00;
Double a3 = 200.00;
Double b3 = 200.00;
System.out.println(a1==b1);//true
System.out.println(a2==b2);//false
System.out.println(a3==b3);//false
}