使用构造函数Java复制对象

时间:2010-10-15 22:43:53

标签: java constructor object copy

所以我想说我想制作一个对象的深层副本,但是使用它的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);

然而,我正在做的事情是不正确的,我不知道为什么......

1 个答案:

答案 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

相关问题