JAVA中的自动装箱与自动拆箱

一、自动装箱和自动拆箱

自动拆箱和装箱是从JDK5.0才开始有的,它方便了基本数据类型和其对应的包装类型之间的转换。
将一个基本数据类型的值赋给其所对应的包装类型称为装箱;将一个基本数据类型包装类类型的值赋给其所对应的基本数据类型称为拆箱,由于装箱和拆箱的过程是自动进行的非人为转换,所以称作为自动装箱和拆箱。

public class Test{

	public static void main (String[] args){
		Integer i=50;//自动装箱
		System.out.println(i);//输出结果50
		int j=i;//自动拆箱
		System.out.println(j);//输出结果50
	}
}
/*简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自
动将包装器类型转换为基本数据类型。*/

自动拆箱和装箱的过程由编译器自动完成:通过包装类的valueOf方法将基本数据类型包装成引用类型;通过包装类对象xxxValue方法将引用类型变为对应的基本类型,所以上页代码经过编译器编译后为:

public class Test{

	public static void main (String[] args){
		Integer i=Integer.valueOf(50);
		System.out.println(i);
		int j=i.intValue;
		System.out.println(j);
	}
}

下面我们来看看需要装箱拆箱的类型有哪些:

基本数据类型包装类
byteByte
intInteger
shortShort
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

二、包装类数据缓存

Java对部分经常使用的数据采用缓存技术,即第一次使用该数据则创建该数据对象并对其进行缓存,当再次使用等值对象时直接从缓存中获取,从而提高了程序执行性能。

public class Test{

	public static void main (String[] args){
		Integer i=50;//声明变量i,通过自动装箱赋值
		Integer j=50;//声明变量j,通过自动装箱赋值
		System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为true
	}
}

Java中只是对部分基本数据类型对应包装类的部分数据进行了缓存:

public class Test{

	public static void main (String[] args){
		Integer i=128;//声明变量i,通过自动装箱赋值
		Integer j=128;//声明变量j,通过自动装箱赋值
		System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为false
	}
}
  1. byte、short、int和long所对应包装类的数据缓存范围为 -128~127(包括-128和127)
  2. float和double所对应的包装类没有数据缓存范围;
  3. char所对应包装类的数据缓存范围为 0~127(包括0和127);
  4. boolean所对应包装类的数据缓存为true和false;

基本数据类型和基本数据类型封装型进行“==”运算符的比较时,基本数据类型封装型会先自动拆箱变为基本数据类型后再进行比较。

public class Test{

	public static void main (String[] args){
		int i=128;//变量i为基本数据类型
		Integer j=128;//创建对象j,通过自动装箱赋值
		System.out.println(i==j);//==两边为引用数据类型,判断地址是否相同;结果为true
	}
}

三、==和包装类中equals方法

  • Java中的==有两种作用:如果是基本数据类型则用于判断其值是否相等;如果为引用类型则用于判断两者的地址是否相同。

  • 基本数据类型包装类中的equals方法用于比对相同包装类中的值是否相等,如果两者比较的包装类类型不同则返回false。

public class Test{

	public static void main (String[] args){
		Integer i=128;//声明变量i
		Integer j=128;//声明变量j
		System.out.println(i==j);//结果为false
		System.out.println(i.equals(j));//由于两者值都是128,并且都是Integer类型,结果为true
	}
}

四、包装类中parseXXX方法

基本数据类型包装类中的parseXXX(String s)方法用于将字符串类型数据转换为相应的基本数据类型;

public class Test{

	public static void main (String[] args){
		int a=Integer.parseInt("-128");
		System.out.println(a);//输出-128
		
		long b=Long.parseLong("127");
		System.out.println(b);//输出127
		
		float c=Float.parseFloat("9.99");
		System.out.println(c);//输出9.99
		
		boolean d=Boolean.parseBoolean("true");
		System.out.println(d);//输出true
	}
}

另外:char类型包装类Character没有相应的parseXXX方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值