Java中的自动装箱和拆箱

有时,需要将int这样的基本数据类型转换为对象,所有的基本类型都有一个与之对应的类,例如,Integer类对应基本类型int,通常我们称这种累为包装器类。(wrapper) 。它们的名字都是很鲜明直接的对应基本数据类型。Integer、Long、Double、

Float、Short、Byte、Character、Void、Boolean。 它们都是final,所以不允许定义子类。

接下来看代码:

package PrimaryTest;

import java.util.ArrayList;

public class autoboxing {
    public static void main(String[] args) {
        /**
         * 我们想定义一个数组列表,而尖括号(泛型)中的数据类型不允许是基本数据类型,也就是说不能写成
         * ArrayList<int> list 这样,我们想往里面放int的对象类型。这就用到了Integer包装器类。所以
         * 尖括号里我们写成Integer
         */
        ArrayList<Integer> list = new ArrayList<>();
        /**
         *         我们用add方法直接添加了一个内容,请注意我们是直接添加了个3,如果没有自动装箱的话,就会报错的。
         有了这个自动装箱机制,虽然我们是执行的list.add(3),但其实自动转换成了list.add(Integer.valueOf(3));
         这种变换就称之为(自动装箱)autoboxing
         */
        list.add(3);

        System.out.println("---------------------这是分割线------------------------");
        /**
         * 相反的,我们将一个Integer对象赋值给一个int时候,便会自动的拆箱,将Integer对象转换为int基本数据类型
         */
        int n  = list.get(0);
        //实际上执行的是 int n = list.get(0).intValue();
        System.out.println(n);  //结果是3

        /**
         * 甚至在算数表达式中也可以自动的装箱和拆箱,例如;
         */
         Integer a = 3 ;
         a++;
         System.out.println(a);
         //编译器可以自动的插入一条拆箱指令,然后a自增计算后,又将结果装箱
    }
}

使用数值对象包装器还有另外1个好处,JAVA设计者发现,可以将某些基本方法放置在包装器中,例如,将一个数字字符串转换成数值。如下:

    String abc  ="123";
        int aa = Integer.parseInt(abc);
        System.out.println(aa); //结果是123
这里与Integer对象没有任何关系,parseInt是一个static方法,但Integer类是放置这个方法的一个好地方。

猜你喜欢

转载自blog.csdn.net/akanarika520/article/details/80213352