@Konrad的帖子非常到位。唯一进行深层复制的通用方法是使用Java序列化机制。显然,这很费资源。另一个注意事项是,有些Java对象无法通过序列化进行复制。例如: 线程和其子类无法被序列化,因为线程的执行状态无法被序列化。 通常情况下,流无法被序列化,因为您无法访问已经写入的流的状态(编写器、输出流)或尚未读取的流的状态(读取器、输入流)。 (实际上,在读取器/输入流的情况下,该状态可能真的是无限的。) GUI组件无法被序列化,因为它们依赖于(外部)图形环境,这是无法被序列化的。
寻找序列化。Java支持开箱即用,但您也可以尝试Hessian、Kryo等工具...这里是Java序列化的介绍:http://java.sun.com/developer/technicalArticles/Programming/serialization/ 这是由Kryo团队进行的基准测试:http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking(包含20个序列化库的列表)。