- 自动拆箱与装箱
Jdk5以后提供了自动拆箱(unboxing)与装箱(autoboxing),但是对拆装箱的细节进行了部分隐藏,需要注意
- 基本数据类型对应的包装类
Java是面向对象的语言,而基本数据类型只是字面量,不是对象。为了解决这个问题java引入了基本数据类型的包装类
Integer Double Long Short Character Boolean Float Byte
Integer i = 10; //自动装箱
Double a = i.DoubleValueOf(); //10.0
也可以使用更一般化的java.lang.Number类来自动装箱。例如:
Number a = 3.4f;
- 自动拆装箱的陷阱
Integer i = null;
Int a = I; //编译无错误 运行时出空指针异常
Integer a1 = 127;
Integer a2 = 127;
System.out.println(a1 == a2); //true
Integer b1 = 128;
Integer b2 = 128;
System.out.println(b1 == b2);//false
==是用来比较两个基本数据类型的值是否相同,同时==也可以判断两个对象的引用是否相同(是否是同一对象)。对于-128~127(1个字节)的值会在你自动拆装箱过程中重用,因此这个范围内的Integer类型对象是相同的,而超出这个范围的则不会得到重用,因此对象实不相等的。
**
* 基本数据类型的自动拆装箱
* @author Pursuit.
* @version 2013-11-12 下午9:51:24
*/
public class AutoBoxing {
public static void main(String[] args) {
Integer i = 10;
Integer a = new Integer(10);
Integer b = 10;
System.out.println(i.doubleValue());
System.out.println(a == i);
System.out.println(i.compareTo(b));
// Number c = 3.14f;
//先拆箱后运算
System.out.println(++i);
/**
* 自动拆装箱中的陷阱
*/
// Integer c1 = null;
// int c = c1; //无编译错误 运行时空指针异常
Integer a1 = 127;
Integer a2 = 127;
System.out.println(a1 == a2); //true
Integer b1 = 128;
Integer b2 = 128;
System.out.println(b1 == b2);//false
System.out.println(b1.equals(b2));//true
}
}