A, 无论是深克隆还是浅克隆都是克隆,既然是克隆就必然会产生一个全新的对象,这个全新的对象和原对象的保持一致性的深浅取决于克隆的深度。但需要始终明确的一点是克隆的对象与源对象没有任何关系,它在堆中是一个独立的实体,占据独立的内存地址,与原对象没有任何引用与指向关系。这个新生的对象是在源对象被克隆时由JVM运行时环境在调用类加载器时通过反射创建出来的。B、深克隆与浅克隆的区别:深克隆的过程是通过序列化来完成的,而序列化的过程可以将对象及所牵涉的所有引用链中的对象一起通过字节流的方式转移到特定的存储单元中(这个存储单元可以是内存也可以是硬盘,对于克隆通常是序列化至内存),再通过反序列化的过程读出这些序列化的字节流重构出对象,这样就完成了一个新对象的产生。而浅克隆不用序列化,这种克隆方式仅仅只是将指定的当前对象复制出来一个,这种复制过程不包括原对象引用的各个对象C、克隆出的对象与原对象具有相同的属性及方法,但克隆的对象与原对象是属于两个不同的独立对象,因此二者占据内存中不同的空间地址。这就好比两个人长的极为相像但他们毕竟还是属于两个人,可以住在不同的场所。 |