Java Copy构造函数

时间:2017-03-09 19:56:29

标签: java arrays object constructor

public class Program {
    IntegSet i1, i2, i3, i4;
    i1 = new IntegSet();
    i2 = new IntegSet(1,2,5);
    i3 = new IntegSet();
    i4 = new IntegSet(i2);
}

我的程序是关于制作整数集。

public class IntegSet{
    private final int MAXALLOWEDSETVALUE=2000;
    private boolean [] data = new boolean[MAXALLOWEDSETVALUE+1];

我有第一个功能,我认为没问题。

public IntegSet(int... elts) {
     int index = 0;
     for(int iteration = 0; iteration < elts.length; iteration++) {
         index = elts[iteration];
         data[index] = true;
    }
}

但是这个功能呢?

public IntegSet(IntegSet source){
    this.data = source.data;
}

这是一个复制构造函数吗?我对它的运作方式有点困惑。它与这个功能有何不同:

public void setTo(IntegSet source){}

我应该用它来称呼它:

i3.setTo(i3.subtract(i1))

谢谢

1 个答案:

答案 0 :(得分:1)

复制构造函数是一个对象的构造函数,允许您复制现有对象。

我认为你原来的问题可能会有拼写错误,但我猜你是否在问:

public IntegSet(IntegSet source){
    this.data = source.data;
}

是一个复制构造函数。

复制构造函数和 public void setTo(IntSet source){}

是你的setTo函数实际上对源输入参数没有任何作用。它根本不会创建新对象。它甚至没有为调用对象分配引用。

i3 = i1;

这会将i1的引用设置为等于i3的引用。 对i3数据所做的任何更改现在也会影响i1,反之亦然。

i3 = new IntegSet(i1);

这将使用复制构造函数创建i1的副本,并允许在每个对象(i1和i3)中独立更改数据成员。

复制构造函数中的内部代码应使用数组克隆函数,例如:

this.data = source.data.clone();