Java中的深拷贝(深复制)和浅拷贝(浅复制)
2014-04-27 09:29
246 查看
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java。虽然java自动管理对象的回收,但对于深拷贝(深复制)和浅拷贝(浅复制),我们还是要给予足够的重视,因为有时这两个概念往往会给我们带来不小的困惑。
浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。
若不对clone()方法进行改写,则调用此方法得到的对象即为浅拷贝,下面我们着重谈一下深拷贝。
运行下面的程序,看一看浅拷贝:
?
s2变了,但s1也变了,证明s1的p和s2的p指向的是同一个对象。这在我们有的实际需求中,却不是这样,因而我们需要深拷贝:
?
当然我们还有一种深拷贝方法,就是将对象串行化:
?
但是串行化却很耗时,在一些框架中,我们便可以感受到,它们往往将对象进行串行化后进行传递,耗时较多。
---
可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。
若不对clone()方法进行改写,则调用此方法得到的对象即为浅拷贝,下面我们着重谈一下深拷贝。
运行下面的程序,看一看浅拷贝:
?
?
?
---
可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
相关文章推荐
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- java List复制:浅拷贝与深拷贝
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- java深浅拷贝(复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)介绍
- java对象拷贝和复制
- java深浅拷贝(复制)
- Java对象复制和数组复制(拷贝)
- java实现FTP远程文件移动(重命名、复制、拷贝)
- java 本地文件复制(将文件拷贝到另一个目录)
- Java IO流之拷贝(复制)文件
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java对象的拷贝与复制
- Java中的深拷贝(深复制)和浅拷贝(浅复制)(二)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- JAVA中复制数组、对象数组拷贝
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java 复制大文件方式(nio2 FileChannel 拷贝文件能力测试)
- java 复制Map对象(深拷贝与浅拷贝)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)(一)