包装类
基本数据类型都有自己对应的包装类,因为Java本质是面向对象编程的,一切的内容在Java看来都是对象
但是基本数据类型没有类,也没有对象,这样就有了矛盾
所以诞生了基本类型的包装类
基本数据类型:
byte,short,int,long,float,double,boolean,char
对应关系:
byte:Byte
short:Short
int:Integer
long:Long
char:Character
float:Float
double:Double
boolean:boolean
包装类的好处
判空有好处
自动装箱和自动拆箱机制
基本类型和它对应的包装类,是等价的
Integer b = 10;// 不会报错,自动装箱
int a = b;// 不会报错,自动拆箱
自动装箱
// int转为Integer
Integer b = 10;// 不会报错,自动装箱
Integer b = Integer.valueOf(10);// 编译后其实是执行了valueOf方法
所以自动装箱的本质,其实就是自动执行了valueOf方法
包装类和基本类型用equals比较大小时,基本类型会自动装箱
自动拆箱
Integer b = 10;
int a = b;// 不会报错,自动拆箱
包装类和基本类型用==比较大小时,包装类会自动拆箱
自动装箱/拆箱面试常考:128陷阱
关于128陷阱,我之前有一篇博客写的很清楚,甚至分析了源码,有兴趣的读者可以去看看
Java包装类:128陷阱——源码分析
和valueOf相关,也就是说和自动装箱息息相关
Integer类里面会使用IntegerCache类的静态缓存池(是一个数组),Integer的值大小在-128~127之内时,值相等的不同的Integer对象的堆内存地址相同
Byte,Short,Long类也存在类似的cache机制
面试问到128陷阱,我们应该怎么回答?
小测验
答案:
true
true
false
true
true
false
true