浅拷贝
复制时只复制它本身和其中包含的值类型的成员变量 ,而引用类型的成员对象 并没有复制
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User implements Cloneable {
// 姓名
private String name;
// 年龄
private int age;
// 邮件
private String email;
// 描述
private String desc;
/*
* 重写 clone 方法,需要将权限改成 public ,直接调用父类的 clone 方法就好了
*/
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
深拷贝
无论是值类型还是引用类型都会完完全全的拷贝一份,在内存中生成一个新的对象
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class PersonDesc implements Cloneable{
// 描述
private String desc;
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
---------------------------------------------------------------
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User implements Cloneable {
// 姓名
private String name;
// 年龄
private int age;
// 邮件
private String email;
private PersonDesc personDesc;
/**
* clone 方法不是简单的调用super的clone 就好,
*/
@Override
public Object clone() throws CloneNotSupportedException {
User user= (User)super.clone();
// 需要将引用对象也克隆一次
user.personDesc = (PersonDesc) personDesc.clone();
return person;
}
}
|