1

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

我在我的项目中使用 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 和数据集类值都已更改。为什么会这样?考虑到我应该保留原始数据集,如何更改数据集的类值?

4

1 回答 1

2
d=dataset

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

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

如果对象实现了Cloneable,您可以使用clone().

于 2013-08-11T03:45:52.597 回答