如何对对象进行Java深层复制?

nka*_*atz 2 java clone

我有一堂课(文学).我需要能够在整个应用程序中将完整的Literal实例保存在内存中,并且有一份我可以更改的副本.我用两种方法来做到这一点:

  1. class Literalimplements Cloneable和override Object.clone()方法.
  2. 工厂构造:

    public Literal(Literal lit){
         this = lit;
    }
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,复制都不起作用.我对副本所做的每一项更改都会更改原件.有谁知道我做错了什么?

aka*_*ppa 5

因为Literal不是一个整数类型,类型的变量Literal持有引用到实际值,因此this = lit只是复制引用,所以你的行为.

您必须递归复制所有成员字段以执行"真实"副本.

文章已接受的答案被Umesh制作在他的评论链接的问题被挂,我认为它会清除你与你的问题打了概念上的问题.