无论clone类继承结构是什么样的,super.clone()都会直接或间接调用Object类的clone()方法。看看jdk帮助文档会发现,Object类的clone()是一个native方法,我们知道,native方法的效率一般来说都是远高于java中的非native方法。这也说明了new一个对象,然后将原对象中的数据导入到新创建的对象中去的做法是多么愚蠢。必须说明的是Object中的clone方法是protected的,所以要使用clone就必须继承Object类(默认)。并且为了可以使其它类调用该方法,必须将其作用域设置为public。
调用Object类中clone()方法时,首先在内存中划分一块同原对象相同的空间,然后将原对象的内容原样拷贝至新对象。我们知道,java中有基本数据类型,对于基本数据类型,这样的操作是没有问题的,但对非基本类型变量,它们保存的仅仅是对象的引用,这也是为什么clone后非基本类型变量和原对象中的变量指向同一个对象的原因。可能你已经注意到,程序中用到了String类型,即对象,为什么没有出现引用指向同一地址的情况?这是因为String是一个不可更改的类(immutableclass),每次给它赋值时,都会产生一个新的String对象。如Stringstr="a";str+="b";在这两句代码中,当执行str+="b"时,实际上是重新成生了一个值为"ab"的String对象,即重新分配了一块内存空间。以上clone方法通常被称为"影子clone"。"影子clone"给我们留下了一个问题,即多个引用指向同一个对象。如何解决该问题呢?答案为"深度clone"。
"深度clone"即在被clone对象的 public Object clone()throws CloneNotSupportedException{}方法中,先克隆出当前对象,再用当前clone出的对象来clone出当前对象的属性对象。
参考:http://www.ebok.cn/Computer-Development/Java/Java-41973_2.html
分享到:
相关推荐
用 Java 语言编写的 初学者可学习的clone()
对java clone的一些讲解,以及我个人的一些心得等等,
Java Clone(类的复制)实例代码 Java Clone(类的复制)实例代码
详细的描述了Java中 clone方法使用
Clone 属性的相关内容 Clone 属性的相关内容
今天小编就为大家分享一篇关于Java Clone深拷贝与浅拷贝的两种实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了 Java clone方法详解及简单实例的相关资料,需要的朋友可以参考下
java中clone的详细用法,分浅拷贝和深拷贝,并分别有详细的实例介绍。从原理分析。
Java中的clone方法详解_动力节点Java学院,动力节点口口相传的Java黄埔军校
Java中的克隆(Clone)机制,很少涉及的内容。
NULL 博文链接:https://gaoquanyang.iteye.com/blog/1177183
Java深浅clone测试代码 流拷贝 Cloneable
clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。下面通过本文给大家介绍java中的clone方法,感兴趣的朋友一起看看吧
主要介绍了java 中clone()的使用方法的相关资料,希望通过本文能帮助大家能掌握clone()的克隆方法,需要的朋友可以参考下
java中仅有的创建对象的两种方式:①.使用new操作符创建对象;②....下面这篇文章主要通过JVM角度给大家详细谈谈Java的clone操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
clone的用法 希望有帮助,仅供参考 通过例子的分析,可以对克隆的方法有所深入了解
java code clone
并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。比如函数参数类型是自定义的类时,此时便是引用传递而不是值传递。以下是一个小例子: ...
java中clone的详细用法,分浅拷贝和深拷贝,并分别有详细的实例介绍。从原理分析。