一、浅拷贝
数据类型如果是基本类型,会按照值传递,进行赋值操作,将属性值复制一份给新的对象;
如果是引用类型的数据变量,将内存的引用地址复制一份给新的变量,实际上是两个对象的成员变量都指向一个实例;
这种情况下对一个成员变量的修改会影响到另一个成员变量。
二、深拷贝
不止要复制对象的 所有基本属性和成员对象的值,还要为所有对象申请内存空间,并且复制每个引用类型的成员变量,换而言之就是对整个对象图进行拷贝。
浅拷贝与深拷贝的区别
浅拷贝只是复制并传递地址引用,让多个对象指向相同的地址;而深拷贝直接连地址空间都全部复制过来。
深拷贝原理图 浅拷贝原理图示例程序的运行结果:
程序段1该段程序的运行结果为p1、p2的名字互不相同,而年龄相同,这是因为p1将引用指向了新的一个字符串,没有在原来的基础上做修改
只是将原来指向摇头耶稣的指针修改为了指向“小傻瓜”的指针,因此p2的值不受影响;然而int类型是基本类型,需要值传递,所以修改年龄为99会导致统一修改的结果。
三、浅拷贝的两种实现方法
通过拷贝构造方法实现浅拷贝
通过重写clone()方法进行浅拷贝(如图所示)
四、深拷贝的两种实现方法
通过clone方法实现
通过序列化实现
网友评论