java实例拷贝,java – 浅拷贝 – 新实例或赋值

浅拷贝是指具有相同属性值的对象的“副本”,无论是原始值还是参考值.

执行浅拷贝时,是否需要“创建新实例”?如:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值