Java拷贝
1、深拷贝和浅拷贝
- java浅拷贝:只拷贝原对象的地址,所以原对象的任何值发生改变,拷贝对象的值也会随之发生改变
- java深拷贝:拷贝原对象的所有值而不是地址,所以原对象的值发生变化时,拷贝对象的值不会发生变化?
浅拷贝示意图:
User user1=new User();
//浅拷贝
User user2=user1;
深拷贝示意图:
2、深拷贝实现方式
- 构造函数方法(常用,性能不好)
- 重写Clone方法:
- (1). 重写Object类的Clone方法,并修改为public
- (2). 实现Cloneable接口,来告诉jvm此类可以运行拷贝
- Apache Commons Lang序列化
- Gson序列化
- Jackson序列化
总结深拷贝:重写clone方法的深拷贝只能对当前类进行拷贝,无法拷贝当前类引用的类(引用的还是原来的地址)
多层次深拷贝示意图: