克隆的实现
程序员文章站
2022-07-10 20:23:44
...
- 浅拷贝
//被复制对象的所有值属性都含有与原来对象的相同,而所有的对象引用属性仍然指向原来的对象。 (地址相同)
public Object clone() throws CloneNotSupportedException {
return (Prototype) super.clone();
}
- 深拷贝
//在浅拷贝的基础上,所有引用其他对象的变量也进行了clone,并指向被复制过的新对象。(地址不相同)
public Classes deepClone() 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);
// 对象输出流读取对象
Object obj = ois.readObject();
return (Classes) obj;
}