一、提要
在java开发时,由于基本类型不能调用方法,在某些方面很不方便,因此产生了包装类。我们把基本类型和对应的包装类的转换叫装箱、拆箱。
1.装箱
基本类型转成包装类对象
关键字valueOf->装箱,可以指定进制:
Integer a= Integer.valueOf("444",16);
2.拆箱
包装类对象转成基本类型
关键字intvalue->拆箱:
Integer a=128;
int i = a.intValue();
3.自动拆箱装箱
自动将基本类型和包装类相互转换的机制。
在涉及到数学运算时自动拆箱(+ - * / =...)
二、128陷阱
1.什么是128陷阱?
情况1:在使用==判断两个包装类对象是否相等时,数值在-128到127范围内返回true,否则即使值一样也返回false;
通过源码分析原因:
Integer a=128;
编译器执行的是:Integer a=Integer.valueOf(128); 也就是调用了valueof()方法,进行了自动装箱。
打开integer的源码,可以看到如果装箱时数值在-128~127之间就直接取出缓存integer数组中的对象返回,否则就调用new开辟一块新的空间。
情况2:包装类对象和基本类型数值通过==比较。
只要数值一样就返回true,原因是包装类对象进行了自动拆箱,转成了基本类型值。
情况3:当然,如果用new创建包装类对象,新开辟了一块内存地址。用==判断,返回false。