java 深克隆与浅克隆
今天再看ArrayList的clone时,看到了clone方法,但是是一个shallow clone,为啥是浅克隆呢,浅克隆跟深克隆有啥区别呢?
考证之后发现,这个确实跟C++的深拷贝和浅拷贝很相似
上测试代码:
1 static class A{ 2 int a=0; 3 4 } 5 static class B implements Cloneable{ 6 A a; 7 B(A a1){ 8 a=a1; 9 } 10 11 @Override 12 protected Object clone() throws CloneNotSupportedException { 13 return super.clone(); 14 } 15 } 16 17 public static void main(String[] args) throws CloneNotSupportedException { 18 B b=new B(new A()); 19 B b1= (B) b.clone(); 20 b1.a.a=2; 21 System.out.println(b1.a.a); 22 System.out.println(b.a.a); 23 }
运行结果如图:
这个就是浅克隆。即只对当前对象做一个副本,对象内部的复杂对象只做引用,其他的就不管了。任性,我服。
深克隆。就是连里面的复杂对象一块拷贝一个副本。这个就得自己写了。
邮箱:akgang@126.com
非著名程序猿-akg