我有一个奇怪的问题,使我完全困惑。
我正在为项目使用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()
来实现。