Java 自动装箱与拆箱

封装类

Java中每一个基本类型都有一个包装类,这种对应的包装类就叫做封装类。如下所示:

int Integer
double Double
float Float
short Short
byte Byte
long Long
这些类类型与基本类型之间可以进行相应的转换,当某些方法只能接收对象的时候,那么封装类将起到很大的作用。

自动装箱

自动装箱的作用就是将基本数据类型转换成对应的类类型的对象

        //i是一个基本数据类型
        int i = 5;
        //把一个基本类型的变量,转换成Integer对象it
        Integer it = i;

在之前的版本中需要手动的new一个新的类类型的对象,

        //i是一个基本数据类型
        int i = 5;
        //把一个基本类型的变量,转换成Integer对象it
        //但是现在版本中不需要这么做了
        Integer it = new Integer(i);

其余的基本类型转换与上面类似

自动拆箱

自动拆箱的目的,就是要把原来的类类型的对象转回成基本类型

        //自动拆箱,直接将对象赋给基本类型变量
        //转换成int类型的i2
        int i3 = it;

也可以通过对象调用方法的方式来转换成基本类型

        // 调用intValue()方法取得对象的值。
        int i2 = it.intValue();
一些应该要注意的问题

1、注意,在循环中要注意自动装箱的性能问题,例如如下的片段:

    Integer sum = 0;
    for(int i=0;i<1000;i++){
          sum+=i;
    }

在这个过程中会执行相应的装箱和拆箱操作,如下:

    int result = sum.intValue() + i;
    Integer sum = result;

上述的程序代码会在循环中不断的产生Integer对象,造成了内存的极大浪费,因此要注意自动装箱和拆箱的使用场合,避免无端的对象产生,浪费内存。
2、注意类类型定义的问题
当定义了一个类类型引用的时候,要注意及时的初始化或者定义为Null,否则可能会在后续的操作中引发NullPointerException异常,造成程序崩溃。
3、封装类的对象缓存的问题
缓存问题指的是在对范围内的对象进行缓存,当新建一个新的对象时,如果范围符合要求,并且存在一个值相同的对象,那么Java不会创建这个对象,而是直接返回这个缓存对象,否则新创建一个的对象。

总结

Java的自动装拆箱在一定程度上解决了基本类型与对象之间的转换问题,对于其中的细节,则应该继续的深入揣摩总结。

你可能感兴趣的:(Java 自动装箱与拆箱)