基本数据类型
| 基本类型 | 包装类型 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| Double | double |
有了基本类型还需要包装类型的原因
- Java是面向对象语言,有些地方需要使用对象,而不是基本类型,比如集合存放的是Object类型
- 让基本类型也有面向对象特征,丰富基本类型操作
拆箱与装箱
拆箱:将包装类型转成基本类型,通过xxValue方法实现
Integer a = 2;
a.intValue()
装箱:将基本类型转成包装类型,通过valueOf方法实现
Integer.valueOf(2)
基本类型和包装类型的区别
- 默认值不一样,包装类型默认是null,基础类型是0,false,\u0000
- 初始化不同,包装类型通过new初始化,基本类型无需初始化
- 存储方式不同,包装类型存储在堆中(对象存储在堆),基础类型存在栈中
场景一,集合内容自动装箱
List<Integer> list = new ArrayList<>()
list.add(2); // 自动装箱,list.add(Integer.valueOf(1))
场景二,自动拆箱需注意包装类型为null情况
Integer a = 2
int b = 3
int c = a + b // 如果此时a为null,则会报出空指针异常
场景三,自动拆箱的缓存
Integer a = 3
Integer b = 3
a == b // true
Integer a = 300
Integer b = 300
a == b // false
原因:引用了缓存机制节省内存,当整型的数值范围是-128 至 127,在装箱操作时,会使用缓存中的对象,而不是重新创建对象
参考资料
Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》