为什么在java中改变了等式的两边?

时间:2013-08-11 03:44:32

标签: java machine-learning weka

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

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

1 个答案:

答案 0 :(得分:2)

d=dataset

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

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

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

执行此操作