浅拷贝:
①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递
②对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,将该成员变量的引用值(内存地址)复制一份给新的对象。
深拷贝:
如果一个类有一个对象,其成员变量中又有一个对象,该对象指向另一个对象,另一个对象又指向另一个对象,直到一个确定的实例。这就形成了对象图。
那么,对于深拷贝来说,不仅要复制对象的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。
也就是说,对象进行深拷贝要对整个对象图进行拷贝!
区别:
而浅拷贝只是传递地址指向,新的对象并没有对引用数据类型创建内存空间。
深拷贝对引用数据类型的成员变量的对象图中所有的对象都开辟了内存空间;