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     }

运行结果如图:

 

这个就是浅克隆。即只对当前对象做一个副本,对象内部的复杂对象只做引用,其他的就不管了。任性,我服。

 

深克隆。就是连里面的复杂对象一块拷贝一个副本。这个就得自己写了。

 

posted @ 2017-04-20 17:34  akgang  阅读(152)  评论(0编辑  收藏  举报