定义:
浅拷贝
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝
深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
区别: 深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。
假设B复制了A,修改A的时候,看B是否发生变化:
如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)
如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)
举例
public class mytest {
public static void main(String[] args) {
Parent item1 = new Parent("john", 10);
Parent item2 = item1.clone();
System.out.println("parent1 = " + item1.toString());
System.out.println("parent2 = " + item2.toString());
}
public static class Parent implements Cloneable{
String name = "";
int age = 0;
Parent (String n, int age){
this.name = n;
this.age = age;
}
public void setName(String na) {
name = na;
}
@Override
protected Parent clone() {
Parent clone = null;
try {
clone = (Parent) super.clone();
} catch (CloneNotSupportedException e){
throw new RuntimeException(e); // won't happen
}
return clone;
}
public String toString() {
return "Parent[" + name + "===" + age + "];";
}
}
}
测试 结果:
修改下main函数:
再执行一次。
测试结果:
发现parent1被修改了,但是parent2并未收到影响。
文章资料来源于百度百科以及以下博客:
https://blog.csdn.net/amandalm/article/details/80353810