本文详细介绍体验J2SE 1.5新特性之装箱和拆箱
在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之后的引用可能相等,也可能不相等
boolean b = true;
Boolean b1 = b;
Boolean b2 = b;
System.out.println(b1 == b2);/* 输出“true” */
char c = '1';
Character c1 = c;
Character c2 = c;
System.out.println(c1 == c2);/* 输出“false” */11. 对性能的妨碍
由于Autoboxing机制的实质是“自动创建能代表基本类型数据的对象”,所以,不可避免的会对性能造成一些妨碍。
责编:豆豆技术应用
正在加载评论...