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))
谢谢
答案 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();