3.Java Auto Boxing and Unboxing
JDK 1.5以后引入了不少概念 作为一个半调子.NET Developer 我发现像Boxing Unboxing(装箱 拆箱 有人译作打包解包)还有Generic(泛型) 这些概念和 C# 有着惊人的相似。 这里的装箱应该理解为 封装对象 ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer()) 拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如 int)。
装箱: Integer a = new Integer() ; a = 100 ; 拆箱: int b = new Integer(100) ;
还那整型做例子: Object myObject = 100; //Boxing + Upcasting int i = (Integer) myObject; //Unboxing + Downcasting 第一行是先把int类型的100装箱为Integer对象 然后上塑造型 为Object类型 赋值给 myObject 第二行是先把Object型的 myObject 强制类型转换为 Integer 然后赋值给 int型的 i
编一个小程序测试一下 你会发现很多问题:
public class Asd{
public static void main(String[] args){
Integer i1 =100; Integer i2=100; if(i1==i2) System.out.println("i1==i2"); else System.out.println("i1!=i2");
}
}
当把i1,i2 的100换成200时结果出现了i1!=i2的奇怪现象,Auto Boxing and Unboxing 编程时要注意这个陷阱呀!