疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java中的自动装箱和自动拆箱


 

 
 
/*
JDK5.0新特性:
以下的特性适合JDK1.5版本之后的。包括1.5
jdk1.4,包括1.4在内之前的所有版本不能使用以下特性。
自动装箱(auto_boxing)和自动拆箱(auto_unboxing)
*/
 
 
public class IntegerTest05{
     
    public static void main(String[] args){
         
        //JDK5.0之前的.
         
        //int-->Integer (装箱)
        Integer i1 = new Integer(10);
         
        //Integer-->int (拆箱)
        int i2 = i1.intValue();
         
         
        //JDK5.0之后,包括5.0
        Integer i3 = 10; //自动装箱
        int i4 = i3; //自动拆箱
         
        System.out.println(i3); //"10"
        System.out.println(i4+1); //11
         
         
        //JDK5.0之后
        m1(321); //自动装箱.
         
        System.out.println(m2(10,5) + 1); //自动装箱
    }
     
     
    public static void m1(Object o){
        System.out.println(o);
    }
     
     
    public static int m2(Integer i1,Integer i2){
        return i1 - i2; //自动拆箱
    }
}
 
//深入了解自动装箱和自动拆箱
 
/*
深入自动装箱和自动拆箱:
         
1.自动装箱和自动拆箱是程序编译阶段的一个概念,
和程序运行无关。
         
2.自动装箱和自动拆箱主要目的是方便程序员编码。
*/
public class IntegerTest06{
     
    public static void main(String[] args){
         
        Integer i1 = new Integer(10);
        Integer i2 = new Integer(10);
         
        //这里不会有自动拆箱
        System.out.println(i1==i2); //false
         
        //比较两个Integer类型的数据是否相等,不能用"=="
        //Integer已经重写了Object中的equals方法.
        System.out.println(i1.equals(i2)); //true
         
         
        //重点:
        Integer i3 = 128;
        Integer i4 = 128;
         
        //上面的等同于
        //Integer i3 = new Integer(128);
        //Integer i4 = new Integer(128);
         
        System.out.println(i3==i4); //false
         
         
        //注意以下程序.
        //如果数据是在(-128~127)之间,java中引入了一个“整型常量池”,在方法区中。
        //该整型常量池只存储-128~127之间的数据。
        Integer i5 = 127; //这个程序不会在堆中创建对象,会直接从整型常量池中拿.
        Integer i6 = 127;
         
        System.out.println(i5==i6); //true
         
        Integer i7 = -128;
        Integer i8 = -128;
         
        System.out.println(i7==i8); //true
         
         
        Integer i9 = -129;
        Integer i10 = -129;
         
        System.out.println(i9==i10); //false
    }
}