一个集合的浅度拷贝意味着只拷贝集合中的元素,不管他们是引用类型或者是值类型,但是它不拷贝引用所指的对象。这就是说新集合中的引用和原始集合中的引用所指的对象是同一个对象。与此形成对比的是,深度拷贝不仅拷贝集合中的元素,而且还拷贝了这些元素直接或者间接引用的所有东东。这也就意味着,新集合中的引用和原始集合中的引用所指的对象是不同的。
浅表副本创建与原始对象具有相同类型的新实例,然后复制原始对象的非静态字段。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制该引用但不复制被引用的对象;这样,原始对象中的引用和复本中的引用指向同一个对象。相反,对象的深层副本复制对象中字段直接或间接引用的全部内容。
例如,考虑一个名为 X 的对象,该对象引用对象 A 和 B。对象 B 又引用对象 C。X 的浅表副本创建一个新对象 X2,该对象也引用对象 A 和 B。与此相对照,X 的深层副本创建一个新对象 X2,该对象引用新对象 A2 和 B2,它们分别是 A 和 B 的副本。B2 又引用新对象 C2,C2 是 C 的副本。使用实现 ICloneable 接口的类执行对象的浅表或深层复制。
 
                    
                     
                    
                 
                    
                 
         
