6.3.3 自动装箱和自动拆箱
把基本类型的值转换为相应的包装类型对象,这一过程称为装箱。例如:
把包装类型对象转换为相应的基本类型的值,这一过程称为拆箱。例如:
JDK 5.0提供了自动装箱和自动拆箱的功能,可以直接使用以下语句来打包基本类型的数据:
在进行编译时,编译器自动根据语句,判断是否进行自动装箱动作。总之,可以将int、boolean、byte、short、char、long、float、double等8种基本类型,分别转换为相应的包装类型Integer、Boolean、Byte、Short、Character、Long、Float或Double。
也可以直接使用以下语句,将包装类对象中所包装的数据提取出来:
可见,自动装箱和自动拆箱能使基本类型和包装类之间的混合运算变为合法。在赋值时,基本类型和包装类之间直接赋值,不需要做任何转换;在运算时,也可以进行自动装箱与拆箱。例如:
结果显示20与10,编译器会自动进行自动装箱与拆箱,也就是10会先被装箱,然后在i+10时会先拆箱,进行加法运算;i++该行也是先拆箱再进行递增运算。再来看一个例子:
boo是Boolean的实例,在进行AND运算时,会先将boo拆箱,再与false进行AND运算,结果会显示false。
还可以使用更一般化的java.lang.Number类来自动装箱。例如:
【例6-2】 自动装箱和自动拆箱在方法参数和返回类型的应用举例。
程序运行结果:
x=96.5,y=73.2
分析与思考:(1)在方法调用时,实参96.5f和73.2f都是float基本类型,而形参score是包装类Float,需要自动装箱。
(2)方法返回类型要求是float类型,而return语句中score的类型为Float,需要自动拆箱。
【例6-3】 自动装箱和自动拆箱在控制语句中的应用举例。
程序运行结果:
很高兴见到你.0号先生
很高兴见到你.1号先生
很高兴见到你.2号先生
很高兴见到你.3号先生
很高兴见到你.4号先生
分析与思考:(1)需要自动装箱是arriving和peopleInRoom的初始化。
(2)需要自动拆箱是while和if语句中的条件表达式、peopleInRoom--和++运算。
注意:(1)自动装箱和自动拆箱是编译器提供的功能,它为编写程序提供了方便,Java虚拟机并不支持基本类型和包装类之间的混合运算。
(2)一般来说,自动装箱操作将产生一个新的包装类对象,但对下面所列的基本类型值,系统将保证其两次装箱产生的是同一个对象。
·boolean型值(true或false);
·byte型值;
·int或short型值,范围:-128~127;
·char型值,范围:′\u0000′~′\u007f′。
【例6-4】 系统将保证其两次装箱产生的是同一个对象举例。
程序运行结果:
不相等!
分析与思考:超出范围-128~127;自动装箱不保证两次装箱产生的是同一个对象。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。