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