java.lang.Object 之 clone() 深拷贝,浅拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.Object 之 clone() 深拷贝,浅拷贝相关的知识,希望对你有一定的参考价值。

  当函数的参数是对象时,传递的是引用类型,在对象函数内部的操作会影响到外边对象。 如果希望传递的是对象的一个拷贝时,这时就需要用到object的clone()方法。拷贝对象返回的是一个新对象,而不是引用;拷贝对象与new操作符返回的新对象的区别就是这个拷贝对象已经包含了原来对象的一些信息,而不是对象的初始信息。 什么时候使用shallow Clone(浅拷贝,影子拷贝) ,什么时候使用 deep clone(深拷贝) :主要看具体域对象的性质是什么,如果是基本类型使用shallow clone ,如果是 reference variable(引用变量)使用deep clone 。

  在clone中分为浅拷贝和深拷贝,浅拷贝就是不管参数是基本类型还是引用类型,直接调用super.clone()进行拷贝,结果引用类型还是指向相同的内存;深拷贝就是在调用super.clone()之后,还要调用引用参数的clone()函数,进行拷贝,来达到深拷贝。

  浅拷贝:

  (1) 基本的数据类型(String)是会拷贝复制一份新的对象

  (2)引用对象还是引用同一份对象。

以上是关于java.lang.Object 之 clone() 深拷贝,浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

关于clone(java.lang.Object)重写

为啥 java.lang.Cloneable 不覆盖 java.lang.Object 中的 clone() 方法?

从 java.lang.Object 访问 clone()

如何修复类 java.lang.Object 的现有方法“clone”和“finalize”的 proguard 警告“找不到引用的方法”

JAVA之Object类

采用Clone()方式创建对象