首页 > 教育学习 > 为什么 > JAVA 中的浅拷贝是什么效果?

JAVA 中的浅拷贝是什么效果?
2012-01-19 20:16:37   来源:   点击:

    JAVA 中的浅拷贝是什么效果?在java中会把对象中的所有字段都拷贝一遍吗?java的对象相当于C++中的指针,那当调用xx.clone()方法时是把其中所有的对象都拷贝一份,形成新的对象吧。如果想实现深拷贝,是不是得在clone()中调用所有包含对象的clone()并重载这些对象的clone()方法??

    3 个答案

    • 答案 1:

      首先必须知道Java拷贝的用途:Java克隆是为了得到一个对象,这个对象与克隆前的对象完全一样,唯一不同就是它们所处的内存地址不相同。对于java中的一切对象(除了基本的数据结构int、float、string等之外)在进行赋值,方法传递的时候,都是一个内存地址的同一个对象! 所谓浅拷贝一般就是就是直接调用对象的clone()方法,这样的拷贝,对于这个对象中的基本数据类型(int、string、float等)的属性,是可以得到完全的拷贝,但是对于这个对象里面的非基本数据类型(对象、集合等)的某些属性,实际上并没有进行克隆,而只是进行一个赋值操作而已,也就是说克隆出来的对象与原对象有一部分内容的内存地址是相同的,这在某些情况下会造成出错! 由此提出了深拷贝的概念,即覆写clone()方法,遍历对象中的每一个属性,采取合适的方式进行克隆即可。例如对于对象中的集合,可以遍历集合,然后构造一个新的集合,重新存储一遍... 更过关于Java克隆的问题详见Blog:hi.baidu.com/wzwahl36...
    • 答案 2:

      Object需要实现克隆接口Clonable。在实现clone方法的时候,一般这样做:class MyObject implements Cloneable { Foo member; public void clone(){ MyObject another = new MyObjct(); if (member instanceof Cloneable){ another.member = (Foo)(((Cloneable)member).clone()); } } }}以上仅仅是实例代码。
    • 答案 3:

      浅拷贝和深拷贝的区别就是在处理对象引用时,浅拷贝只复制引用,而深拷贝会将引用对应的对象复制一份。深拷贝一般都对串行化和对象序列化来实现。

相关热词搜索:

上一篇:现在有哪些国外石油公司进入中国?
下一篇:笔记本怎么设置最省电?