java的8种基本类型都有其对应的装箱类型:
基本类型 | 比特位 | 装箱类型 | |
---|---|---|---|
整型 | byte | 8 | Byte |
short | 16 | Short | |
int | 32 | Integer | |
long | 64 | Long | |
浮点型 | float | 32 | Float |
double | 64 | Double | |
文本型 | char | 16 | Character |
逻辑型 | boolean | 8 | Boolean |
注:装箱类型比基本类型多一个非功能值null。
自动装箱:valueOf(int i)
自动拆箱:intValue()
基本类型优于装箱类型:
- 装箱类型是引用类型,需要额外的空间代价;
- 装箱类型与基本类型运算,需要拆箱,反复的装箱、拆箱降低性能;
- 装箱类型的判等(==):小于128,自动拆箱,做基本类型的比较;大于127,做对象相等判断。
什么时候使用装箱类型:
- 作为集合的元素、键、值;
- 在参数化类型中,如ThreadLocal<Integer>,因为反射需要引用类型。
常见问题:
- 场景:定义了int常量SUCCESS=0,逻辑处理中,从数据库取出的某条记录状态字段(Integer status),判断是否为success,抛出了NullPointException。 分析:典型的int与Integer比较问题。问题关键在于Integer与int比较时,会自动拆箱,status.intValue();若此时的status为null,就会出现该问题。 解决方案: if (status != null && status == SUCCESS) { //处理 } 或者 SUCCESS指定为Integer,使用SUCCESS.equals()。