浅拷贝 vs 深拷贝
java的对象拷贝分为浅拷贝和深拷贝两种方式
浅拷贝
对于基本类型:属于值传递,将值复制一份给新的对象,新的对象属性复制了一份属性,两个对象拥有了两份属性。 对于引用类型:属于引用传递,将引用传递了一份。引用所指向的对象是相同的。因此其中一个对象的修改会影响另一个对象的值。
String类型是一种特例。虽然String是引用类型,但是他的值是放在字符串常量池中。当对象的重新赋值后,引用的地址发生了改变。
浅拷贝的两种方式
- 构造器方式
- 重写clone()
深拷贝
对于基本类型:属于值传递,将值复制一份给新的对象,新的对象属性复制了一份属性,两个对象拥有了两份属性。 对于引用类型:不仅复制了对象中所有的成员变量值,也为复制后的成员变量开辟了新的内存空间,新的对象的引用类型指向的是新的成员变量的地址。
深拷贝的两种方式
- 重写clone(),为每一层对象进行拷贝
- 通过对象序列号实现拷贝