java如何深度复制一个对象
时间: 2024-05-15 19:15:33 浏览: 108
Java中有多种方法可以深度复制一个对象,以下是其中的一些方法:
1. 实现Cloneable接口并重写clone()方法:
```
public class MyClass implements Cloneable {
private int x;
private List<Integer> list;
@Override
public Object clone() throws CloneNotSupportedException {
MyClass cloned = (MyClass) super.clone();
cloned.list = new ArrayList<>(list);
return cloned;
}
}
```
2. 使用序列化和反序列化:
```
public static <T> T deepCopy(T obj) throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(obj);
oos.flush();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));
return (T) ois.readObject();
}
```
3. 使用第三方库,如Apache Commons Lang:
```
MyClass cloned = SerializationUtils.clone(original);
```
以上方法中,第一种方法需要实现Cloneable接口并重写clone()方法,效率较高,但需要手动处理引用类型的深度复制。第二种方法使用序列化和反序列化实现深度复制,可以处理任意复杂度的对象,但效率较低。第三种方法使用第三方库,代码简洁,但需要引入外部依赖。
阅读全文