Java編程語言中,對象是一個非常重要的概念。當我們創建一個對象時,有時需要對其進行復制,以便在其他上下文中使用。Java中提供了兩種對象復制方式:淺復制和深復制。
淺復制是指將一個對象的所有非靜態屬性都復制到另一個對象中。新對象是原對象的一個副本,但是兩個對象中的所有引用屬性都指向相同的對象。實現淺復制很容易,只需重載Object類中的clone()方法即可。
public class Person implements Cloneable { private String name; private int age; private Listhobbies; public Person(String name, int age, List hobbies) { this.name = name; this.age = age; this.hobbies = hobbies; } @Override public Person clone() throws CloneNotSupportedException { return (Person)super.clone(); } }
在上面的例子中,如果我們對一個Person對象進行淺復制,那么新對象和原對象會共享hobbies列表對象。如果我們修改新對象的hobbies列表,原對象的hobbies列表也會受到影響。
深復制是指將一個對象及其所有引用屬性都復制到一個新的對象中。新對象是原對象的一個完全獨立的副本。實現深復制的方法有很多,常見的是使用序列化和反序列化技術。
public class Person implements Serializable { private String name; private int age; private Listhobbies; public Person(String name, int age, List hobbies) { this.name = name; this.age = age; this.hobbies = hobbies; } public Person deepCopy() throws IOException, ClassNotFoundException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(this); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); return (Person)ois.readObject(); } }
在上面的例子中,我們使用了序列化和反序列化的技術,將一個Person對象及其所有引用屬性都復制到新的對象中。新對象和原對象之間沒有任何共享的引用屬性,所以它們是完全獨立的。
總的來說,淺復制和深復制都是很有用的技術。我們應該根據情況選擇適合自己的復制方式。
上一篇php csv 類
下一篇php csv 格式