什么是clone?
clone实际上就是复制。所谓的复制指的是先创建一个对象,然后将源对象中的数据导入到新创建的对象中。
复制对象和复制引用的区别:
我们看到下面一个例子:
public class Person implements Cloneable{
private String name;
private int age;
private boolean sex;
public Person(String name, int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public static void main(String[] args) throws CloneNotSupportedException {
Person p = new Person("John", 21, true);
Person p1 = p;
Person p2 = (Person) p.clone();
System.out.println("p: " + p);
System.out.println("p1: " + p1);
System.out.println("p2: " + p2);
}
}
输出结果:
p: clone_demo.Person@1b6d3586
p1: clone_demo.Person@1b6d3586
p2: clone_demo.Person@4554617c
我们可以看到结果:对于复制引用,即对象p1,它所指向的地址和源对象地址是相同的,而对于对象p2,它是通过clone方法获取到一个新的对象地址,和源地址是不同的。可见,复制引用只是将引用指向了源对象地址,而clone方法是真正地克隆了一个对象。