Java中的深拷贝(深复制)和浅拷贝(浅复制)
2017-05-12 10:43
267 查看
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在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克隆(深浅拷贝,复制)详解
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- java拷贝/复制文件到其他文件夹中
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- java实现FTP远程文件移动(重命名、复制、拷贝)
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
- Java 复制大文件方式(nio2 FileChannel 拷贝文件能力测试)
- Java数组拷贝/复制的效率比较
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java中的深拷贝(深复制)和浅拷贝(浅复制)
- Java 潜拷贝和深拷贝(浅复制和深复制)
- Java中对象的复制/拷贝
- Java 复制大文件方式(nio2 FileChannel 拷贝文件能力测试)
- java文件复制代码片断(java实现文件拷贝)
- java深浅拷贝(复制)
- java实现文件拷贝(复制)
- java克隆(深浅拷贝,复制)详解
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
- Java中的深拷贝(深复制)和浅拷贝(浅复制)