java中的克隆问题

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()方法的时候对浅克隆时采用引用复制的方式进行了改变 ,不是复制引用而是复制在内存堆中的位置



                                  



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值