自动装箱与拆箱的含义
将基本数据类型(如int,double等)自动转换为包装类,将包装类自动转换为基本数据类型
Integer i = 10;
int n = i;
弊端
在循环进行自动装箱操作时,每一次循环都会新建一个包装类的对象。降低程序性能,加重垃圾回收的工作量
为什么要有包装类?
- 将对象封装起来可以同时拥有数据和对应的方法
- 泛型中的应用,泛型只会接受包装类,而不会接受基本数据类型
- 基本类型和引用类型不能直接转换,需要先转到包装类再转到引用类型
为什么不能用基础类型?
Java 泛型在编译之后会进行类型擦除,所有的泛型类型参数都会被替换成它们的上限(通常是Object
)。然而,基本数据类型不是Object
的子类,所以不能直接用于泛型。
Integer缓存
Integer内部实现了静态缓存池,用于存储特定范围内的Integer对象
默认范围是-128--127,用valuOf方法不会创建新的实例,而是复用缓存中的对象
深拷贝与浅拷贝
区别
深拷贝直接复制新建一个对象,复制与被复制的为两个对象。浅拷贝复制与被复制对象引用的是同一个对象
实现深拷贝的方法
- 实现Cloneable接口并重写clone()方法
- 使用序列化与反序列化
- 手动递归复制