自动拆箱与装箱

自动拆箱与装箱


  一、自动拆箱与装箱

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
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42867975/article/details/99741855