玩命加载中 . . .

自动装箱/自动拆箱(35)


自动装箱/自动拆箱

  1. 自动装箱相关概念:

    • 自动装箱/拆箱是程序编译阶段的一个概念,与程序的运行无关,
      也就是说即使你编写的是Integer i3 = 200;在程序运行时还是Integer i3 = new Integer(200);两者创建手法相等。
    • 自动拆箱与装箱主要目的是为了程序猿的方便编写程序。
    • 在使用自动装箱时如果是Integer类型且在:-128~127范围内创建的对象,在程序运行创建时直接调用方法区中的”整形常量池”中数字,而不会在创建对象,也就是说:Integer i1 = 10; 与 Integer i2 = 10; 最后对比(i1==i2)出来的是true,但是不使用自动装箱。直接手动装箱不管在不在范围内都是(Integer i2 = new (Integer (10); Integer i3 = new (Integer (10); i2==i3)会直接返回false
        public static void m1(Object o) {
            System.out.println(o);
        }
        public static void main(String[] args) {
            // 包装类型的自动装箱(auto_boxing)、自动拆箱(auto_unboxing)
            // JDK5.0以后的版本可以直接使用自动装箱/拆箱,可以不用new一个对象出来调用了
            // JDK5.0之前的:
            // int ---> Integer 装箱
            Integer i1 = new Integer(11);
            System.out.println("JDK5.0之前的装箱:" + i1);
            // integer ---> Int 拆箱
            int i2 = i1.intValue();
            System.out.println("JDK5.0之前的拆箱:" + i2);
    
            // JDK5.0之后的
            // int ---> Integer 自动装箱
            Integer i3 = 200;
            System.out.println("JDK5.0的自动装箱:" + i3);
            m1(i3);
            // integer ---> Int 自动拆箱
            int i4 = i3;
            System.out.println("JDK5.0的自动拆箱:" + i4);
    
            // 深入了解自动装箱拆箱
            // 手动装箱
            Integer i7 = new Integer(12);
            Integer i8 = new Integer(12);
            System.out.println(i7==i8);// --> false
            // Integer重写了equals方法,使得在Integer中比较的是两者的数值并非内存地址
            System.out.println(i7.equals(i8));// --> true
            // 自动装箱
            // 如果不超出范围值的话是搜索整型常量池中数值,然后对比i5与i6的相应数值,因为两者都是从整形常量池中创建出来的,自然是true
            Integer i5 = 12;
            Integer i6 = 12;
            System.out.println(i5==i6);// --> true
            // 自动装箱超出范围
            // 如果超出范围值的话是程序在堆内存创建对象,然后直接对比i9与i10的内存地址,结果内存地址不一样返回false
            Integer i9 = 129;
            Integer i10 = 129;
            System.out.println(i9==i10);// --> false
    

文章作者: 小靳同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小靳同学 !
评论
  目录