我有一个让我很困惑的奇怪问题。
我正在为我的项目使用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和数据集类值都已更改。为什么会发生这种情况?考虑到我应该保留原始数据集,如何更改数据集的类值?
答案 0 :(得分:2)
d=dataset
您现在有两个变量都引用相同的对象。
与C ++不同,Java从不隐式复制任何内容 如果您想要一个对象的单独副本,您需要自己制作一个。
如果对象实现Cloneable
,您可以使用clone()
。