一、深浅拷贝概念
在java里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝。
1、浅拷贝,将对象中的所有字段复制到新的对象(副本)中。
- 值类型字段的值被复制到副本中后,在副本中的修改不会影响到源对象对应的值。
- 引用类型字段的值被复制到副本中的还是引用类型的引用,而不是引用的对象,在副本中对引用类型的字段值做修改会影响到源对象本身。
简而言之,浅拷贝里面存在引用对象,只会指向引用对象的地址,而不是直接复制整个引用对象。
2、深拷贝,将对象中的所有字段复制到新的对象(副本)中。
不过,无论是对象的值类型字段,还是引用类型字段,都会被重新创建并赋值,对于副本的修改,不会影响到源对象本身。
深拷贝简单归纳就是对象内部引用的对象均复制。
二、浅拷贝举例
1、使用clone进行浅拷贝
import lombok.Data;
@Data
public class User implements Cloneable{
private String name;
private int age;
//引用类型
private Love love;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
@Data
class Love implements Cloneable{
private String name;
private int num;
}
class test{
public static void main(String[] args) throws CloneNotSupportedException {
Love love = new Love();
love.setName("羽毛球");
User user = new