源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

解析JAVA深度克隆与浅度克隆的区别详解

  • 时间:2020-05-01 03:13 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:解析JAVA深度克隆与浅度克隆的区别详解
在JAVA克隆对象不能简单的使用clone方法,clone方法只是进行浅克隆。请看下方: [b]深度克隆类: [/b]Java代码
[u]复制代码[/u] 代码如下:
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class DepthClone {     public  final static Object objectCopy(Object oldObj) {         Object newObj = null;         try {             ByteArrayOutputStream bo = new ByteArrayOutputStream();             ObjectOutputStream oo = new ObjectOutputStream(bo);             oo.writeObject(oldObj);//源对象             ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());             ObjectInputStream oi= new ObjectInputStream(bi);             newObj = oi.readObject();//目标对象         } catch (IOException e) {             e.printStackTrace();         }catch (ClassNotFoundException e) {             e.printStackTrace();         }         return newObj;     } }
[b]浅度克隆类: [/b]Java代码
[u]复制代码[/u] 代码如下:
import java.io.Serializable; public class SimpleClone implements Cloneable ,Serializable {     private static final long serialVersionUID = -7552721152118950502L;     public    String s = null;     public Object o = null;     public CloneObject cloneObject = null;          public SimpleClone(CloneObject cloneObject) {         this.cloneObject = cloneObject;     }     public Object clone() {         SimpleClone newSimpleClone =  null;         try {             /* 浅克隆 */             newSimpleClone = (SimpleClone)super.clone();         } catch (CloneNotSupportedException e) {             e.printStackTrace();         }         return newSimpleClone;     } }
[b]克隆对象: [/b]Java代码
[u]复制代码[/u] 代码如下:
import java.io.Serializable; public class CloneObject implements Serializable{     private static final long serialVersionUID = 4332788486669750696L;     private String name ;     public String getName() {         return name;     }     public void setName(String name) {         this.name = name;     } }
[b]克隆测试: [/b]Java代码
[u]复制代码[/u] 代码如下:
public class TestClone {     public static void main(String[] arg) {         CloneObject obj1 = new CloneObject();         obj1.setName("cloneOne");         CloneObject obj2 = new CloneObject();         obj2.setName("cloneTwo");         SimpleClone simpleClone1 = new SimpleClone(obj1);         SimpleClone simpleClone2 = new SimpleClone(obj2);         simpleClone1.s = "simpleClone1";         simpleClone1.o = "simpleClone1Object";         //simpleClone2 = (SimpleClone)simpleClone1.clone();         simpleClone2 = (SimpleClone)DepthClone.objectCopy(simpleClone1);         /* 如果是浅克隆, simpleClone1中的cloneObject会随着simpleClone2的cloneObject改变面改变*/         simpleClone2.cloneObject.setName("cloneThree");         System.out.println(simpleClone1.cloneObject.getName());         System.out.println(simpleClone2.cloneObject.getName());     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部