A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨杨 中级黑马   /  2013-2-2 10:59  /  1188 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

clone() 有深拷贝和浅拷贝之分 不是太明天谁能帮忙解释一下

点评

同学。。。最起码的提问问题不该有错别字吧  发表于 2013-2-2 11:26

4 个回复

倒序浏览
悲剧了{:soso_e127:}
回复 使用道具 举报
深克隆,是连带内部数据,以及可能存在的内部引用的实例一起克隆的.
浅克隆类似于表象克隆,只是一个引用,或者是当前对象的副本. 而不涉及内部更深层次的数据,以及引用

比如一个对象存在对对其他对象,如字符串对象的引用.  那么浅克隆就是克隆当前对象. 内部依然是字符串的引用.

深克隆是克隆当前对象,以及内部对象引用,连带被引用的对象..  
回复 使用道具 举报
司懿卓 发表于 2013-2-2 12:01
深克隆,是连带内部数据,以及可能存在的内部引用的实例一起克隆的.
浅克隆类似于表象克隆,只是一个引用,或 ...

能用代码说说明一下吗 ???
回复 使用道具 举报
杨杨 发表于 2013-2-2 12:09
能用代码说说明一下吗 ???

比如,是比如: 如果要克隆的对象是一个String集合.
ArrayList<String> arrl = new ArrayList<>();
arrl.add("123");    //添加元素

其实,添加进集合的并不是String对象本身,而是该对象的引用或者地址.
浅克隆就是直接克隆该集合,产生一个集合副本. 只是克隆了引用.
但是集合元素内部的元素依然是 String对象的引用或者地址.
此时两个集合中的元素引用指向同一个String对象


深克隆,不但把该集合以及内部对象引用克隆了,还把该引用所指向的对象也可克隆了.
此时两个集合中的元素引用指向两个不同的String对象.

实际的浅克隆是克隆的类对象中成员变量的引用,而不是成员变量引用的对象.
深克隆则是连同该成员变量的引用以及被指向的对象一起克隆. 这里需要使用递归方法来实现.

现在了解下就行了. 暂时没必要深究.

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马