什么是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方法是真正地克隆了一個對象。