java中的克隆问题

来源:互联网 发布:新开淘宝 编辑:程序博客网 时间:2024/06/08 15:17

Cloneable问题:

             首先 Cloneable是javaAPI中几个标记接口之一 ,它里面没有明确clone这个方法,但是一旦继承了这个借口就可以重写clone()方法,在Object类中是继承了这个借口的,但是Object中的clone()方法有一定局限性。有时候使用起来不方便。

             在java中,克隆又分为深克隆和浅克隆。所谓软克隆就是当你所要克隆的对象的数据包含有 对象类型的属性 比如说 A类中的属性含有类型为B类的变量,这样当你复制的时候,克隆对象就只会复制B类型变量的引用,这样的话,就造成了一个问题,原对象和克隆对象的属性B类型变量就指向的是同一个实例对象,当你想修改克隆对象中B类型变量的值时候,就会影响原对象。所以这往往达不到效果。而Object就是采用的浅克隆 。

            而深克隆说简单点就是将你A类中B类型变量一起复制了。话不好多说上例子。

public class A implments cloneable{  //要想实现对象的克隆就必须继承cloneable接口 并重写clone()方法

    public int i=10;  //int类型变量

    public B b;

    A(int j){

 this.b=new B(j);//A的构造方法中 初始化b

}

public A clone(){

  A a=(A)super.clone();//深克隆

 a.b=(B)a.b.clone();

 return a;

}

}

 class B implments cloneable{

   public int i=9;

B(){

}

public B clone(){

return (B)super.clone();//浅克隆

}

}

总之一句话 深克隆的意思就是重写clone()方法的时候对浅克隆时采用引用复制的方式进行了改变 ,不是复制引用而是复制在内存堆中的位置



                                  



0 0
原创粉丝点击