Open Yhzhtk opened 8 years ago
浅Clone:仅Clone对象,其内部的字段若存在其他对象便是引用 深Clone:会将整个对象全部 Clone 一遍,内部所有类和对象都会被Clone
任何类都默认基础 Object,而 Object 类有一个 protect 的方法 protected native Object clone() throws CloneNotSupportedException;
protected native Object clone() throws CloneNotSupportedException;
疑问 如果是对象内部的对象也实现了 Cloneable 接口,那么外部对象的 Clone 会 调内部的 clone,而不是引用吗?? 测试的答案是即便内部对象实现了 Cloneable,也是浅Clone
实现 Serializable 接口,可以使用如下方法来实现深度Clone
//将对象写到流中 ByteArrayOutputStream bo=new ByteArrayOutputStream(); ObjectOutputStream oo=new ObjectOutputStream(bo); oo.writeObject(this); //从流中读出来 ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi=new ObjectInputStream(bi); return oi.readObject();
Clone分类
浅Clone:仅Clone对象,其内部的字段若存在其他对象便是引用 深Clone:会将整个对象全部 Clone 一遍,内部所有类和对象都会被Clone
Clone方式
实现 java.lang.Cloneable 接口
任何类都默认基础 Object,而 Object 类有一个 protect 的方法
protected native Object clone() throws CloneNotSupportedException;
数组的Clone
疑问 如果是对象内部的对象也实现了 Cloneable 接口,那么外部对象的 Clone 会 调内部的 clone,而不是引用吗?? 测试的答案是即便内部对象实现了 Cloneable,也是浅Clone
使用序列化的方式实现深 Clone
实现 Serializable 接口,可以使用如下方法来实现深度Clone