拷贝?
创建一个指向对象的引用变量的拷贝
对象拷贝会创建对象本身的一个副本,因此如果我们再一次服务我们car对象,就会创建这个对象本身的一个副本,同时还会有第二个引用变量指向这个被赋值出来的对象、
浅拷贝?
对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。“里面的对象”会在原来的对象和它3的副本之间共享。(只是新建了两个指向,实际上改变的是同一个对象)
public class Person {
private Name name;
private Address address;
public Person(Person originalPerson) {
this.name = originalPerson.name;
this.address = originalPerson.address;
}
[…]
}
浅拷贝的问题就是两个对象并非独立的。如果你修改了其中一个Person对象的Name对象,那么这次修改也会影响另一个Person对象
深拷贝?
深拷贝是整个独立的对象拷贝。如果对整个Person对象进行深拷贝,会对整个对象的结构都进行拷贝。
不仅对Person对象使用了拷贝构造器还会对内部的对象也使用拷贝构造器
创建一个真正的深拷贝,需要一直拷贝下去,一直覆盖到Person对象所有的内部元素,最后只剩下原始类型以及"不可变对象" int类型的number是一个原始类型,并非对象,只是一个简单的值,不能共享,因此在创建第二个实体变量时,可以自动创建一个独立的拷贝。String是一个不可变对象。简言之,不可变对象也是对象,可一旦创建好了以后就再也不能被修改了。因此,可以不用为其创建深拷贝就能对其进行共享
总结
浅拷贝就是复制引用 深拷贝就是复制值