简介
自动拆箱和装箱是从JDK5.0才开始有的,它方便了基本数据类型和其对应的包装类型之间的转换。
将一个基本数据类型的值赋给其所对应的包装类型称之为自动装箱;将一个基本数据类型包装类类型的值赋给其所对应的基本数据类型称之为自动拆箱。
实现
例一
public class Test {
public static void main(String[] args) {
int x=1000;//自动拆箱
Integer y=new Integer(1000);//自动装箱
boolean flag = x==y;
System.out.println(flag);
}
}
结果
public static void main(String[] args) {
boolean flag = new Integer(100) == new Integer(100);//自动装箱
System.out.println(flag);
}
因为创建了两个对象,比较的是对象的地址。
结果
System.out.println(1000==new Integer(1000));
由于new Integer(1000)进行了自动拆箱,因此结果
例二
Java中只是对部分基本数据类型对应包装类的部分数据进行了缓存:
-
byte、short、int和long所对应包装类的数据缓存范围为 -128~127(包括-128和127);
-
float和double所对应的包装类没有数据缓存范围;
-
char所对应包装类的数据缓存范围为 0~127(包括0和127);
-
boolean所对应包装类的数据缓存为true和false;
public static void main(String[] args) {
Integer aa=127;
Integer bb=127;
flag = aa==bb;
System.out.println(flag);
}
结果
然而
public static void main(String[] args) {
Integer aa=128;//超过了包装类缓存范围
Integer bb=128;
flag = aa==bb;
System.out.println(flag);
}
结果
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(100.0==i2);
System.out.println(i3==i4);
}