浅复制将一个对象复制之后,生成一个新的对象,新对象的所有成员变量(基本类型或引用类型)都含有与原有对象相同的值,如果原有对象的成员变量是基本数据类型,就会将这个变量的值拷贝一份到新对象里面,如果原有对象的成员变量是引用数据类型,那么这个引用指向的对象不会新生成一份,而是,在新对象里面的这个引用跟原有对象的引用指向的是同一个对象。深复制将一个对象复制之后,生成一个新的对象,新对象的基本数据类型变量含有与原有对象相同的值,如果原有对象的成员变量是引用数据类型,在新对象里面,这些引用变量将指向被复制过的新对象,而不再是指向原有的那些被引用的对象,深复制把要复制的对象所引用的对象都复制一遍。
例子:
class A {
public int i; public int j;
}
A a = new A();
浅拷贝: A a1 = a;
深拷贝:
A a1 = new A();
a1.i = a.i; a1.j = a.j;
如上所示: 浅拷贝只拷贝对象本身 深拷贝则拷贝对象中引用的对象,一直拷贝下去。
|