体验J2SE 1.5新特性之装箱和拆箱 - 编程入门网
使用Autoboxing和Auto-Unboxing,并不需要什么特别的步骤,一切都会在编译器的安排下自动发生。 现在可以这样来对待一个int型的数据: 清单3:自动完成的Boxing操作
因为编译器会悄悄的把这段代码转换成接近这个样子: 清单4:作了Autoboxing之后的等价形式
这里所用的能接受int类型的值为参数,生成Integer实例的valueOf方法,是J2SE 1.5中新加入的内容。其它包裹类也都有可以接受对应的基本类型的值为参数,生成对应的包裹类实例的valueOf方法加入。 而这样对待一个Integer型的对象也是可以的: 清单5:自动完成的Unboxing操作
因为编译器会悄悄的把这段代码转换成类似这个形状: 清单6:作了Auto-Unboxing之后的等价形式
大体上,只要把一个结果类型是基本类型的表达式,放到需要让它们的包裹类出现的位置上,就会诱发Autoboxing;类似的,只要把一个结果类型是包裹类的表达式,放到只允许相应的基本类型出现的位置上,就会诱发Auto-Unboxing。 “Autoboxing/Auto-Unboxing”特性的来源 J2SE 1.5中增加的许多语言特性都可以在C#里找到对应的东西。不过根据Bruce Eckel对Joshua Bloch的采访,尽管Java的研发小组确实很关注C#(Joshua Bloch本人的案头就放着一本关于C#的书),但是只有“Autoboxing/Auto-Unboxing”和“Metadata”确实是从C#中直接借鉴来的特性。 体验J2SE 1.5新特性之装箱和拆箱(3)时间:2010-07-083. 发生Autoboxing的具体时机 发生Autoboxing的具体时机,主要有这么三种: 把基本类型的数据赋给引用类型的变量时。例如把一个int型的数据赋给一个Integer型变量。 清单7:赋给引用类型的变量基本类型的数据
把基本类型的数据传给引用类型的参数时。例如给一个定义成Object的参数传递一个boolean型的数据。 清单8:传给引用类型的参数基本类型的数据
把基本类型的数据往引用类型上强制转化时。例如在一个long型的数据前面加上(Long)。 清单9:从基本类型的数据到引用类型上强制转化
4. Autoboxing的局限 Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。 类似这样的代码是不能工作的,尽管int型的数据完全可以用一个Long对象来表示: 清单10:不能同时进行自动向上转型和Autoboxing
这是因为这段代码实际上相当于: 清单11:Autoboxing操作会在自动向上转型之前发生
而Integer并不是Long的子类,所以这个转化无法进行。如果一定要进行这种操作,需要手工追加一次转型: 清单12:需要先强制向上转型,再作Boxing
体验J2SE 1.5新特性之装箱和拆箱(4)时间:2010-07-085. 发生Auto-Unboxing的具体时机 发生Auto-Unboxing的具体时机,则主要有这么七种: 把包裹类对象赋给基本类型的变量时。例如把一个Integer型的数据赋给一个int型变量。 清单13:赋给基本类型的变量包裹类对象
把包裹类对象传给基本类型的参数时。---www.bianceng.cn。例如给一个定义成boolean的参数传递一个Boolean型的数据。 清单14: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |