自动拆箱与装箱
一、自动拆箱与装箱
public class Test {
public static void main(String[] args) {
//自动装箱与自动拆箱
int a= 7;
Integer b = a;//自动装箱,基本数据类型转化为包装类
int c = b;//自动拆箱,包装类转化为基本数据类型
}
}
二、包装类数据缓存
public class Test {
public static void main(String[] args) {
System.out.println("***************************Java中只是对部分基本数据类型对应包装类的部分数据进行了缓存");
//Byte、Long、Integer、Short对-128~127之间的数据进行了缓存,在常量池里面
Integer aa = 127;
Integer bb = 127;
System.out.println(aa==bb);//在-128~127之间,输出为true
Integer dd = 128;
Integer ee = 128;
System.out.println(dd==ee);//不在-128~127之间,输出为false
//char所对应包装类的数据缓存范围为 0~127
Character cc = 127;
Character ff = 127;
System.out.println(cc==ff);//在 0~127之间,输出为true
cc = 128;
ff = 128;
System.out.println(cc==ff);//不在0~127之间,输出为false
//Double、Float没有数据缓存范围
Double gg = 127.0;
Double hh = 127.0;
System.out.println(gg==hh);//没有数据缓存,输出为false
//Boolean数据缓存为true和false
Boolean jj = true;
Boolean tt = true;
System.out.println(jj==tt);
}
}
三、基本数据类型包装类中的equals方法
以Integer为例:
public class Test {
public static void main(String[] args) {
//包装类中的equals方法,先比较基本数据类型包装类是否相同,不同则返回false,相同则比较值是否相同,相同为true,否则为false
Integer aa = 128;
Integer bb = 128;
Short cc= 128;
System.out.println(aa==bb);//不在-128~127之间,输出为false
System.out.println(aa.equals(bb));//aa、bb基本数据类型包装类相同,在比较值的大小时自动拆箱,变为int类型,大小相等,输出为true
System.out.println(aa.equals(cc));//aa、cc基本数据类型包装类不同,输出为false
}
}
结果
注意:当基本数据类型包装类执行equals方法与对应的基本数据类型比较,比较的是值的大小
public class Test {
public static void main(String[] args) {
Integer aa = 128;
int bb = 128;
short cc= 128;
System.out.println(aa==bb);//输出为true
System.out.println(aa.equals(bb));//输出为true
System.out.println(aa.equals(cc));//输出为false
}
}