java对象拷贝工具
时间: 2023-10-29 09:55:55 浏览: 99
Java中可以使用以下几种方式进行对象拷贝:
1. 浅拷贝(Shallow Copy):使用`clone()`方法实现浅拷贝。浅拷贝只是复制了对象的引用,而不是创建一个新的对象。修改原对象或拷贝对象的属性会相互影响。
```java
class MyClass implements Cloneable {
private int value;
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
// 使用浅拷贝
MyClass obj1 = new MyClass();
obj1.setValue(10);
MyClass obj2 = (MyClass) obj1.clone();
System.out.println(obj2.getValue()); // 输出 10
obj2.setValue(20);
System.out.println(obj1.getValue()); // 输出 20,原对象也被修改了
```
2. 深拷贝(Deep Copy):通过序列化和反序列化实现深拷贝。深拷贝会创建一个新的对象,并复制对象的所有属性。修改原对象或拷贝对象的属性不会相互影响。
```java
import java.io.*;
class MyClass implements Serializable {
private int value;
public void setValue(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public MyClass deepCopy() throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
oos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
MyClass copy = (MyClass) ois.readObject();
ois.close();
return copy;
}
}
// 使用深拷贝
MyClass obj1 = new MyClass();
obj1.setValue(10);
MyClass obj2 = obj1.deepCopy();
System.out.println(obj2.getValue()); // 输出 10
obj2.setValue(20);
System.out.println(obj1.getValue()); // 输出 10,原对象不受影响
```
除了上述方法,还可以使用第三方库如Apache Commons的`SerializationUtils`类、Gson库等来实现对象的深拷贝。
阅读全文