对象深浅克隆

帖子: 

http://topic.csdn.net/u/20080721/20/2d1be221-5e1d-48a3-b493-6e8a9eceae1e.html?seed=1231546968

比如说有下面的这样的类
public class A
{
ArrayList list;
  public A()
{
      list = new ArrayList();
  }
}

A a = new A();
A b = (A)a.clone();

这样的结果默认情况下呢,a.list与b.list的值是一样,也就是指向了一个同一个对象,如果通过a.list操作,b.list也就被改变了.
浅克隆就是简单的成员复制.但成员所引用的对象没有得到复制.所以要覆盖clone方法,不但都有一个ArrayList类型的成员,而且这个成员所引用的 < < <对象的内容>>>也一样的,但不是同一个.

String a =new String("a");
String b = a;

这时候可以说b是a的简单克隆.

String a = new String("a");
String b = new String(a);

这样可以理解为深克隆,两者的内容都是一样的.

public class A
{
ArrayList list;
  public A()
{
      list = new ArrayList();
  }
  protect Object clone()
  {
          A b = new A();
          b.list = this.list.clone();
          return b;
  }
}

因为ArrayList的clone已经覆盖了Object的,所以这样就形成了深克隆.

不覆盖那个方法的时候:
A a  = new A();
A b = (A)b.clone();
a.list==b.list-->true;

覆盖方法之后
A a  = new A();
A b = (A)b.clone();
a.list==b.list-->false;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值