自动装箱和拆箱

包装器

包装器:每一个基本类型对应的都有一个类,比如int对应的Integer类,这些类称为包装器(wrapper)。

对象包装器类是不可变的,即一旦构造了包装器,包装在其中的值就不允许改变。。同时,对象包装器类还是final,因此不可以定义它们的子类。

ArrayList尖括号中的类型参数不可以是基本类型,这时候就需要包装器。

自动装箱

为了便于添加int类型的元素到ArrayList中,有一个称为自动装箱的特性。

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

list.add(2);
//自动装箱会将这句自动变换为
//list.add(Integer.valueOf(2));

同样的,将Integer对象赋值给int值时,会自动拆箱。

int n = list.get(i);
//自动拆箱为
//int n = list.get(i).intValue();

其次,在算术表达式、类型转换中会 自动拆箱->运算->自动装箱。

Integer n = 3;
//自动拆箱后运算
n++;
//运算完成后自动装箱

Integer a = 1;
Double b = 2.0;
//a自动拆箱,提升为Double,然后自动装箱
System.out.println(true?a:b);
//?前为判断条件,true则输出:前,false则输出:

需要注意的是,比较包装类需要调用equals。

实现装箱和拆箱的是编译器,和虚拟机没有关系

你可能感兴趣的:(java,java,装箱和拆箱,装箱,拆箱)