体验J2SE 1.5新特性之装箱和拆箱 - 编程入门网
期间会表现得非常正常:
清单25:表面上,只是普通的赋值
这是因为这段代码实际上相当于: 清单26:实际上,是在试图调用null的方法
而试图调用null的方法是一种不被虚拟机认可的行为。 如果没记住有关的规则 大部分违反了使用“Autoboxing/Auto-Unboxing”机制时,需要遵守的约束的代码,都会造成编译错误。因此,即使并未准确的记住有关的规则,也不难及时发现、改正。只有违背了“不能对null进行Auto-Unboxing操作”的限制时,引发的是运行时异常,需要特别小心。 体验J2SE 1.5新特性之装箱和拆箱(6)时间:2010-07-089. 对重载的影响 Java支持“重载”的机制,允许在同一个类拥有许多名称相同而形参列表不同的方法。然后,由编译器根据调用时的实参来选择到底要执行哪一个。 Autoboxing/Auto-Unboxing机制的引入,稍微增加了一些作这种选择时要考虑的因素——因为可能会有一个方法,既有一个能接受一个Integer型参数的版本,又有一个能接受一个int型参数的版本,而Autoboxing/Auto-Unboxing机制能自动的把实参在这两种类型之间转化,光凭原有的判断规则,二者是难以取舍的。但是,因为同时有这两个版本的做法完全合情合理,又不能在这里给出一个“reference to 被调用的方法名 is ambiguous”的编译错误来推卸责任。这就需要增加一条新的判断规则。 这条新增的规则是,不用进行Autoboxing/Auto-Unboxing的版本,优先于需要进行Autoboxing/Auto-Unboxing的版本。 因此,在这种情况下具体选择哪一个,要看传递的实参最初是什么类型。 清单27:不用进行Autoboxing/Auto-Unboxing的版本优先
10. 值相等和引用相等 在Java语言中有两个不同的“相等”概念——值相等和引用相等。这样就有一个“两个值相等的基本类型数据,经过Autoboxing之后,得到的对象的引用是否相等”的问题。 在《JSR 201: Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import》中,对这个问题,是作了这样的规定: If the value p being boxed is true, false, a byte, an ASCII character, or an integer or short number between -127 and 128, then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2. 这意味着这个答案可能是“是”也可能是“否”,由被Autoboxing的数据的类型和取值来决定。因此在检测两个对象是否代表相同的值的时候,还是有必要调用equals()方法来进行。 不过在J2SDK 1.5 Beta 1和Beta 2里的实际情况,和这稍微有些出入,“Autoboxing之后得到相同的对象引用”的范围被缩小了: 清单28:原来的值相等,经过Autoboxing之后的引用可能相等,也可能不相等
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |