【发布时间】:2017-09-15 15:06:28
【问题描述】:
在过去的 4 天里,我的 Java 代码出现了问题,而我这辈子都找不到问题的根本原因。
基本上,我创建了一个包含对象列表作为属性的对象列表的 ArrayList。但是当我尝试在列表的第一个元素中应用方法时,其他对象也会更新!
这是我的对象结构的基本概述:
public class Matrix {
public double[][] A;
public Matrix(double[][] A) {
this.A = A;
}
}
public class Model {
public Matrix M;
public Model(Matrix M) {
this.M = M;
}
public static Model(Model m) {
// modifying model a bit
return newModel;
}
}
public class MyProgram {
public ArrayList<Model> models;
public main() {
this.models = new ArrayList<Model>(NUM);
Matrix A = randomMatrix();
for (int i = 0; i < NUM; i++) {
this.models.add(new Model(A));
}
}
public otherMethod() {
this.models.set(0, changeModel(this.models.get(0)));
}
}
问题是每当我调用 otherMethod 时,列表中的所有模型也会更改!
【问题讨论】:
-
出了什么问题?你没有描述任何特定的问题/输出问题?
-
Java 完全按照你说的做。你说你所有的模型都应该有相同的
Matrix(假设这就是关于循环隐藏的评论)。因此,当您将Matrix更改为一个Model时,您也会更改所有其他模型中的相同Matrix。 -
@TheophileDano 我更新了这个问题:)