gpt4 book ai didi

java - 对象克隆浅拷贝不改变变量

转载 作者:行者123 更新时间:2023-11-29 06:42:34 26 4
gpt4 key购买 nike

我试图克隆一个对象并更改新克隆对象的成员函数。如果它是浅拷贝并且根据 wiki 页面,浅拷贝和原始对象指向同一个对象,那么它应该更改变量值。

    CloneExample obj1=new CloneExample();
CloneExample obj2=(CloneExample) obj1.clone();
obj1.a=2;
obj1.c='a';
System.out.println("obj1 real "+obj1.a+" "+obj1.c);
System.out.println("obj2 real "+obj2.a+" "+obj2.c);
obj2.a=99;
obj2.c='z';
System.out.println("obj2 after change "+obj2.a+" "+obj2.c);
System.out.println("obj1 after change "+obj1.a+" "+obj1.c);
System.out.println("obj1="+obj1+" obj2="+obj2);

如果这个克隆是浅拷贝,那么 obj2 和 Obj1 指向同一个引用 obj,改变 obj2 应该反射(reflect)在 obj1 中。它不会发生。任何人都可以解释一下(我知道克隆旨在为我们提供对象副本,但如果它是浅拷贝那么我们为什么需要浅拷贝?我们应该始终进行深拷贝)。谢谢。

最佳答案

obj1 的浅拷贝创建另一个实例 CloneExample 类的 obj2 (obj1!=obj2)。 他们不共享值成员。

但是如果我们的类包含一个引用类型,例如 java.util.Date,那么如果它们共享对该 java.util 的引用,那么更改它的值将反射(reflect)在两个对象中。日期

In Java, what is a shallow copy?

关于java - 对象克隆浅拷贝不改变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9830003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com