对java的浅拷贝和深拷贝的理解

参考网址:http://www.cnblogs.com/chenssy/p/3308489.html 、https://blog.csdn.net/chenssy/article/details/12952063

浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值,这个方式被称为浅拷贝。

深拷贝:当一个类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。这个方式称为深拷贝

对于浅拷贝,当对象的成员变量是基本数据类型时,两个对象的成员变量已有存储空间,赋值运算传递值,所以浅拷贝能够复制实例。但是当对象的成员变量是引用数据类型时,就不能实现对象的复制,只能传递引用。

深拷贝对对象内部的引用均复制,它是创建一个新的实例,并且复制实例。

Object类的clone()方法只能实现浅拷贝,基本规则如下:

1、 基本类型

如果变量是基本数据类型,则拷贝其值,比如int、float等。

2、 对象

如果变量是一个实例对象,则拷贝其地址引用,也就是说此时新对象与原来对象是公用该实例变量。

3、 String字符串

若变量为String字符串,则拷贝其地址引用。但是在修改时,它会从字符串池中重新生成一个新的字符串,原有字符串对象保持不变。

猜你喜欢

转载自blog.csdn.net/Cary_1029/article/details/82181045