小白求教,请问什么是深表副本和浅表副本

慕飒潇湘 2020-12-06 12:40:18
刚学java第二天,没什么编程基础,遇到这样一个问题,不是很懂,哪位大神能透彻的讲一下,感觉网上的资料感觉模棱两可了,有什么案例能抽象的对比一下吗?
...全文
8601 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
生财 2020-12-17
  • 打赏
  • 举报
回复
共同学习:一个是对象引用,一个是复制对像?
老紫竹 2020-12-07
  • 打赏
  • 举报
回复
一个复制了你的【动态照片】,另一个复制了你个你。 作用都是用于【刷脸】
八爻老骥 2020-12-06
  • 打赏
  • 举报
回复
引用 2 楼 慕飒潇湘 的回复:
[quote=引用 1 楼 icoolno1 的回复:]浅考备就是只复制引用,深考备就是复制出一个相同的新对象。

比如有个类

class Person{public String name="tom";}

如果a=new Person();

b=a,b.name="jim",那a.name也会变成jim,这就是浅考备。

如果b=new Person();b.name=a.name;此时a.equse(b)是相等的,但b.name=jim,a.name还是tom,这是深考备。

这样赋值不是常量池了吗,在栈当中16进制的内存地址是一样的啊,但是堆当中的内容不一样了啊[/quote]

跟常量没关系吧,java里边主要是引用类型,不同的数组可以引用相同的元素,一个数组排序查询,不影响别一个数组,但对元素属性进行赋值就会产生影响,深度复制后,虽然内容都一样,但元素都是新的对象,也就建立一个真正的副本。
慕飒潇湘 2020-12-06
  • 打赏
  • 举报
回复
引用 1 楼 icoolno1 的回复:
浅考备就是只复制引用,深考备就是复制出一个相同的新对象。 比如有个类 class Person{public String name="tom";} 如果a=new Person(); b=a,b.name="jim",那a.name也会变成jim,这就是浅考备。 如果b=new Person();b.name=a.name;此时a.equse(b)是相等的,但b.name=jim,a.name还是tom,这是深考备。
这样赋值不是常量池了吗,在栈当中16进制的内存地址是一样的啊,但是堆当中的内容不一样了啊
八爻老骥 2020-12-06
  • 打赏
  • 举报
回复
浅考备就是只复制引用,深考备就是复制出一个相同的新对象。

比如有个类

class Person{public String name="tom";}

如果a=new Person();

b=a,b.name="jim",那a.name也会变成jim,这就是浅考备。

如果b=new Person();b.name=a.name;此时a.equse(b)是相等的,但b.name=jim,a.name还是tom,这是深考备。

62,615

社区成员

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

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