我有一个奇怪的问题,让我完全困惑。
我在我的项目中使用 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()
来实现。
关于java - 为什么java中等式两边都变了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168542/