深拷贝浅拷贝java
时间: 2023-10-19 19:34:33 浏览: 101
在 Java 中,对象的拷贝可以分为深拷贝和浅拷贝。
浅拷贝(Shallow Copy)是指创建一个新对象,新对象的属性和原对象的属性值相同,如果属性是引用类型,则仅复制引用而不复制引用对象本身。换句话说,浅拷贝只是复制了引用,两个对象将共享同一个引用对象。
深拷贝(Deep Copy)是指创建一个新对象,同时复制其引用类型的属性所引用的对象,而不是仅复制引用。深拷贝会创建一个完全独立的对象,修改其中一个对象的属性不会影响另一个对象。
在 Java 中,要实现深拷贝可以使用以下几种方式:
1. 实现 Cloneable 接口并重写 clone() 方法:
```java
public class MyClass implements Cloneable {
private int num;
private MyObject obj;
@Override
protected Object clone() throws CloneNotSupportedException {
MyClass cloned = (MyClass) super.clone();
cloned.obj = (MyObject) obj.clone();
return cloned;
}
}
```
2. 使用序列化和反序列化:
```java
import java.io.*;
public class MyClass implements Serializable {
private int num;
private MyObject obj;
public MyClass deepCopy() throws IOException, ClassNotFoundException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
ObjectOutputStream objOutput = new ObjectOutputStream(output);
objOutput.writeObject(this);
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
ObjectInputStream objInput = new ObjectInputStream(input);
return (MyClass) objInput.readObject();
}
}
```
需要注意的是,要实现深拷贝,对象及其引用类型的属性必须都要实现 Cloneable 接口或者是可序列化的。另外,深拷贝可能会带来性能上的开销,因为需要复制对象及其引用类型的属性。因此,在使用深拷贝时要谨慎考虑性能问题。
阅读全文