Java中实现深拷贝的两种方式是clone()和序列化。
clone()方法是Object类中定义的一个方法,它可以用来实现深拷贝。要实现深拷贝,需要在要拷贝的类中覆写Object类的clone()方法,并且在clone()方法中调用super.clone()方法来实现对象的拷贝,同时也要实现Cloneable接口,以标识该类支持clone()方法。
public class Person implements Cloneable{ private String name; private int age; private Address address; @Override public Object clone() throws CloneNotSupportedException { Person p = (Person)super.clone(); p.address = (Address)address.clone(); return p; } }
使用clone()方式实现深拷贝的缺点是实现起来比较复杂,而且当类中有复杂的数据结构时,需要对每一个数据结构的拷贝都要单独实现,这样会比较麻烦。
序列化是一种将对象转换为字节序列的过程,可以将字节序列保存到文件或者内存中,也可以通过网络传输到另一个计算机环境中。序列化也可以用来实现深拷贝,只需要将要拷贝的对象进行序列化,将序列化的字节序列保存到字节数组中,再将字节数组反序列化成对象即可。
public static Object deepClone(Object obj) throws IOException, ClassNotFoundException { // 将对象序列化成字节数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(obj); oos.close(); // 将字节数组反序列化成对象 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); Object cloneObj = ois.readObject(); ois.close(); return cloneObj; }
使用序列化方式实现深拷贝的优点是实现起来比较简单,只需要将要拷贝的对象进行序列化和反序列化即可,而且不管要拷贝的对象有多复杂,都可以通过序列化实现深拷贝。
本文链接:http://task.lmcjl.com/news/8109.html