Java中的拷貝操作可以分為深度拷貝和淺拷貝兩種。它們兩者的主要區別在于:深度拷貝會將對象中的所有成員變量都進行復制,而淺拷貝只會復制對象的引用(即指針)。
// 淺拷貝示例代碼 public class Person implements Cloneable { private String name; private Date birthday; @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } Person p1 = new Person(); Person p2 = (Person) p1.clone();
從上述代碼中可以看到,在實現拷貝的過程中,只是調用了Object類的clone()方法,將p1的引用直接賦給了p2,兩者指向的是同一個對象。
// 深度拷貝示例代碼 public class Person implements Cloneable { private String name; private Date birthday; @Override public Object clone() throws CloneNotSupportedException { Person p = (Person) super.clone(); p.birthday = (Date) this.birthday.clone(); return p; } } Person p1 = new Person(); Person p2 = (Person) p1.clone();
上述代碼中,實現了Person類的拷貝操作,此時的拷貝可以視為一種深度拷貝。在clone()方法中,我們不僅調用了父類的clone()方法完成對象的拷貝,還將p1中的birthday成員變量再次進行了拷貝。這樣,就可以實現完整對象的拷貝,保證p1和p2指向的是不同的對象。
需要注意的是,在進行深度拷貝時,需要保證對象的所有成員變量都是可拷貝的。當成員變量不可拷貝時,需要通過其他方式進行處理,以保證程序的正常運行。
下一篇css中加上標簽