根本数据类型拆装箱
基本数据类型拆装箱
- 自动拆箱与装箱
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 } }