浅拷贝 | 拷贝了原对象的地址,所以原对象的任何值发生改变的时候,拷贝对象的值也会随之而发生变化。 |
深拷贝 | 拷贝源对象的所有值而不是地址,所以即源对象的值发上变化时,拷贝对象的值不会发生变化。 |
浅拷贝
定义一个Person类
public class person{
private String name = "张三";
public String getName() {
return name ;
}
public void setName(String name ) {
this.name = name ;
}
}
main运行
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1.getName()); //张三
Person p2 = p1;
p2.setName("奥特曼");
System.out.println(p1.getName()); //奥特曼
System.out.println(p2.getName()); //奥特曼
}
}
输出结果为:
第一个 p1 输出最开始的“张三”,让p2 拷贝 p1 ,然后p2 赋值为“奥特曼”,打印p1,p2 得到都是 “奥特曼”。
浅拷贝:当 p2 任何值被改变的时候,p1也会被改变。同理,p1 任何值被改变时,p2也会被改变。
**************************************************************************************************************
深拷贝
常见的几种深拷贝方式:
- 构造函数方式
- 重写clone方法
- Apache Commons Lang序列化
- Gson序列化
- Jackson序列化