在Java編程中,經常需要復制一個對象。Java提供了兩種方法來實現這個目的,分別是:clone()方法和copy構造函數。
clone方法是Object類的一個方法,通過調用該方法可以克隆一個對象,得到與原對象完全相同的一個新對象。
public class Person implements Cloneable { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } @Override public Person clone() { try { return (Person) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } }
在代碼中,通過實現Cloneable接口,并重寫clone()方法,就可以實現克隆功能。然后在需要創建新對象的地方調用該方法即可。
Person p1 = new Person(18, "Tom"); Person p2 = p1.clone();
另一種方法是使用copy構造函數,這是通過在構造函數中傳入一個同類型的對象,將該對象的狀態復制給當前對象完成的。
public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public Person(Person other) { this.age = other.age; this.name = other.name; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } }
在代碼中,通過重載構造函數,就可以實現復制功能,并且使用起來更加簡單。
Person p1 = new Person(18, "Tom"); Person p2 = new Person(p1);
兩種方法各有優缺點,clone方法可以實現深度克隆,將引用類型的對象也復制,但是需要實現Cloneable接口,并且存在克隆拋出異常的風險。而copy構造函數相對簡單,但是只能實現淺復制,需要手動處理引用類型對象的復制。