有时,需要将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类是放置这个方法的一个好地方。