黑马程序员技术交流社区

标题: clone() 的理解 [打印本页]

作者: 杨杨    时间: 2013-2-2 10:59
标题: clone() 的理解
clone() 有深拷贝和浅拷贝之分 不是太明天谁能帮忙解释一下
作者: 杨杨    时间: 2013-2-2 11:57
悲剧了{:soso_e127:}
作者: 折纸时代    时间: 2013-2-2 12:01
深克隆,是连带内部数据,以及可能存在的内部引用的实例一起克隆的.
浅克隆类似于表象克隆,只是一个引用,或者是当前对象的副本. 而不涉及内部更深层次的数据,以及引用

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

深克隆是克隆当前对象,以及内部对象引用,连带被引用的对象..  
作者: 杨杨    时间: 2013-2-2 12:09
司懿卓 发表于 2013-2-2 12:01
深克隆,是连带内部数据,以及可能存在的内部引用的实例一起克隆的.
浅克隆类似于表象克隆,只是一个引用,或 ...

能用代码说说明一下吗 ???
作者: 折纸时代    时间: 2013-2-2 13:10
杨杨 发表于 2013-2-2 12:09
能用代码说说明一下吗 ???

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

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


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

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

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






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2