Java复制构造函数


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))

谢谢

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

我认为您可能有原始问题中的错别字,但我猜您是在问:

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

是复制构造函数。

复制构造函数和public void setto(intset源){}

是,您的Setto函数实际上对您的源输入参数没有任何作用。它根本不会创建一个新对象。它甚至没有分配给调用对象的引用。

i3 = i1;

这将设置i1的引用等于i3的引用。现在,对I3数据进行的任何更改也会影响I1和Visa-vessa。

i3 = new integset(i1);

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

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

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

最新更新