所以我想说我想制作一个对象的深层副本,但是使用它的contsructor。所以我有:
public class PositionList {
private Position[] data = new Position[0];
private int size = 0;
public PositionList(PositionList other, boolean deepCopy) {
if (deepCopy==true){
size=other.getSize();
for (int i=0;i<data.length;i++)
data[i]=other.data[i];
}
else {
data=other.data;
size = other.size;
所以说我有这个被称为:
PositionList list = new PositionList();
PositionList acopy = new PositionList(list, true);
然而,我正在做的事情是不正确的,我不知道为什么......
答案 0 :(得分:1)
问题在于你的深层复制逻辑:
size=other.getSize();
for (int i=0;i<data.length;i++)
data[i]=other.data[i];
您正在设置size
字段(对data
数组而言是冗余的),但是没有为data
字段分配新数组,这可能是您的整个点“深刻”复制。您应该将data
初始化为其他size
(或other.data.length
):
data = new Position[other.data.length];
for (int i=0;i<data.length;i++)
data[i]=other.data[i];
(并且一起摆脱size
)