----引用《Java与模式》
模式的实现:深复制和浅复制
正如前面所说的,复制或克隆有两种方式。这两种方式分别叫做浅复制(浅克隆)和深复制(深克隆)。
浅复制(浅克隆)
被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其它对象的引用都仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆)
被复制对象的所有的变量都含有与原来的对象相同的值,除去那些引用其它对象的变量。那些引用其它对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍;而这种对被引用到的对象的复制叫做间接复制。
深复制要深入到多少层,是一个不易确定的问题。在决定以深复制的方式复制一个对象的时候,必须决定对间接复制的对象是采取浅复制还是继续采用深复制。因此在采取深复制时,需要决定多深才算深。此外,在深复制的过程中,很可能会出现循环引用的问题,必须小心处理。