我有一个奇怪的问题,使我完全困惑。

我正在为项目使用WEKA,并且我想更改数据集的类值以测试某些内容。所以我将数据集保存到另一个名为d的值中,并使用setClassValue方法更改类值。最后,我在d和数据集变量中为每个实例打印classValues。

Instances d=dataset;
for (int i = 0; i <dataset.size(); i++) {
    dataset.get(i).setClassValue(10);
    System.out.println(dataset.get(i).classValue()+ "\t" +d.get(i).classValue() );
}


结果令人难以置信,d和数据集类的值均已更改。为什么会这样呢?考虑到应该保留原始数据集,如何更改数据集的类值?

最佳答案

d=dataset


现在,您有两个都引用同一对象的变量。

与C ++不同,Java从不隐式复制任何内容。
如果需要对象的单独副本,则需要自己制作一个。

如果对象实现Cloneable,则可以使用clone()来实现。

10-07 18:59
查看更多