gpt4 book ai didi

java - 浅拷贝 - 新实例或赋值

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:35 26 4
gpt4 key购买 nike

浅拷贝是指对象的“副本”,无论是原始值还是引用值,其属性值都相同。

在执行浅拷贝时是否需要“创建一个新实例”?作为:

public class A {
int aValue;
B bObj;

...

public A createShallow(A a1Obj) {
A aObj = new A();
aObj.aValue = a1Obj.aValue;
aObj.bObj = a1Obj.bObj;

return aObj;
}
}

或者复制赋值也被认为是浅拷贝:

B b = new B(10);
A a = new A(1, b);

A a1 = a;

article维基百科将浅拷贝定义为引用变量共享相同的内存块。所以根据这个copy by assignment也会是一个浅拷贝。

但这不是指向同一对象的变量而不是对象的“复制”吗?

最佳答案

While performing shallow copy is it necessary to "create a new instance" ?

是的,您必须创建一个实例来创建对象的副本()。仅仅进行引用赋值只会创建一个指向同一实例的引用副本

您使用了一个非静态方法来创建一个副本。但通常我更喜欢两种方式:-

要么使用复制构造函数:-

public A(A obj) {
copy.aValue = obj.aValue;
}

并像这样使用它:-

A first = new A();
A copy = new A(first);

或者,使用一个公共(public)静态方法获取一个实例并返回它的一个副本。

public static A createCopy(A obj) {
A copy = new A();
copy.aValue = obj.aValue;
return copy;
}

关于java - 浅拷贝 - 新实例或赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667556/

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