自动装箱和拆箱

包装器

包装器:每一个基本类型对应的都有一个类,比如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。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值