我想在默认构造函数中声明ArrayList。 但是,当我这样做时,它给了我一些参考问题。
private List<List<Integer>> matrix;
Matrix(List<List<Integer>> matrix) {
this.matrix = matrix;
}
Matrix() {
this.matrix = new ArrayList<>();
}
我想这正在改变该类的其他实例。
Matrix resultedMatrix = new Matrix();
List<List<Integer>> resultedMatrix = new ArrayList<>();
resultedMatrix.add(Arrays.asList(2, 4, 6));
resultedMatrix.add(Arrays.asList(2, 4, 6));
resultedMatrix.add(Arrays.asList(2, 4, 6));
Matrix expected = new Matrix(resultedMatrix);
org.opentest4j.AssertionFailedError:
预期:com.bootcamp.matrix.Matrix@32cffa6a
Actual:com.bootcamp.matrix.Matrix@792a0fb3
答案 0 :(得分:0)
在Java中,非基本变量保存在内存中,并且这些变量仅是内存中对象的引用。这意味着,每次创建新对象时,引用它的变量仅包含在其中找到对象的内存地址。 因此,当您创建两个具有相同值的不同对象时,它们是不相等的!
List<List<Integer>> list1 = new ArrayList<>();
List<List<Integer>> list2 = new ArrayList<>();
list1==list2 //returns false
您可以实现一个equals
函数,该函数将比较两个对象的值。
list1.equals(list2)