浅拷贝是指具有相同属性值的对象的“副本”,无论是原始值还是参考值.
执行浅拷贝时,是否需要“创建新实例”?如:
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将浅拷贝定义为共享相同内存块的参考变量.所以按照这个副本分配也将是一个浅层副本.
但它不是指向同一个对象的变量而不是对象的“复制”吗?
解决方法:
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 static A createCopy(A obj) {
A copy = new A();
copy.aValue = obj.aValue;
return copy;
}
标签:java
来源: https://codeday.me/bug/20190613/1230961.html