本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 浅克隆:
Object 中的 clone() 方法在对某个对象克隆时对其仅仅是简单地执行域对域的 copy
- 对基本数据类型和包装类的克隆是没有问题的。String、Integer 等包装类型在内存中是不可以被改变的对象,所以在使用克隆时可以视为基本类型,只需浅克隆引用即可
- 如果对一个引用类型进行克隆时只是克隆了它的引用,和原始对象共享对象成员变量
2. 深克隆:
在对整个对象浅克隆后,对其引用变量进行克隆,并将其更新到浅克隆对象中去,返回的是一个新对象。
public class Student implements Cloneable{
private String name;
private Integer age;
private Date date;
@Override
protected Object clone() throws CloneNotSupportedException {
Student s = (Student) super.clone();
s.date = (Date) date.clone();
return s; //返回的是一个新对象
}
//.....
public static void main(String[] args) {
Student s1 = new Student("zhangsan",11,new Date());
try {
Student s2 = (Student) s1.clone();
System.out.println(s1);// Student@1b6d3586
System.out.println(s2);// Student@4554617c
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}