关于深拷贝与浅拷贝的问题,不是很懂!求助.

xucheng2004 2004-10-30 10:54:08
在学习java过程中对深拷贝与浅拷贝不是很理解,那位大哥能用段具体代码说明一下吗?谢谢!
...全文
72 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanceqw 2004-10-30
  • 打赏
  • 举报
回复
更正:
public Object clone(){
B b=new B();
b.j=this.j;
return b;
}
chanceqw 2004-10-30
  • 打赏
  • 举报
回复
假设有两个class:A和B
public class A{
public int i;
public B b;
public A{
i=0;
b=new B();
}
}
public class B{
public int j;
public B(){
j=0;
}
}

现在你要copy A类型的对象
public A shallowCopy (A a){
A ca=new A();
ca.i=a.i;//深拷贝,因为基本类型是直接传值
ca.b=a.b;//浅拷贝,非基本类型传递的是对象的引用
return ca;
}

所以,如果你使用这个函数
A a=new A();
A da=shallowCopy(a);
则da.b跟a.b指向的是同一个对象。如果你希望更深一层的copy
可以实现B的clone方法
public class B{
public int j;
public B(){
j=0;
}
public Object clone(){
B b=new B();
b.j=this.j;
return j;
}
}

则深拷贝方法实现如下
public A deepCopy(A a){
A ca=new A();
ca.i=a.i;
ca.b=(B) a.b.clone();
return ca;
}

这时,两个A类型的对象指向不同的B类型对象
enrico 2004-10-30
  • 打赏
  • 举报
回复
浅拷贝只复制数据成员,如果数据成员有指向其他对象,这些对象的内容无法被复制

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧