Java的自动装箱与拆箱

时间:2023-02-17 12:38:48

  1.什么是自动装箱、拆箱:

     自动装箱就是自动将原始数据类型转换成对应对象类型,反之则是自动拆箱。装箱:int -> Integer,double->Double...

  2.自动装箱拆箱要点:

     自动装箱时,编译器会自动调用ValueOf()将原始数据转为对应的对象,自动拆箱时,编译器会调用intValue()等接口,将对象转为原始数据类型。

  3.何时发生自动装箱、拆箱:

     在Java中,方法调用和接收方法返回值时,会发生自动装箱和拆箱。

     ArrayList<Integer> list = new ArrayList<>();

     list.add(3);

     list.add(4);

     // -------------- 以上为自动装箱 ---------------

     int a = list.get(0); // 此处为自动拆箱

 

  4.自动装箱的弊端:

     在循环体中自动装箱,会创建多余的对象,影响程序性能:

     Integer sum = 0;

     for(int i = 0; i < 5000; i++) {

       sum += 1;

     }

     

     上面的代码中,可以看成是 sum = sum + 1; 但是,“+”法操作并不适用于Integer类型,在这个程序中,编译器会先将Integer类型的数据转为int类型,进行“+”法过后,再将int类型数据转为Integer类型,大概为:int s = sum.intValue() + 1;Integer sum = new Integer(s);所以,在这个程序中,我们在循环体中使用自动拆箱,装箱时,会产生4000多个多余的对象,这大大增加了Java GC的工作量,性能也会受到影响。

 

  5.重载与自动装箱拆箱:

     在调用重载方法时不会发生自动装箱、拆箱操作的。

 

参考文章:http://www.importnew.com/15712.html