无法初始化默认构造函数中的ArrayList

时间:2019-03-24 11:39:55

标签: java

我想在默认构造函数中声明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

1 个答案:

答案 0 :(得分:0)

在Java中,非基本变量保存在内存中,并且这些变量仅是内存中对象的引用。这意味着,每次创建新对象时,引用它的变量仅包含在其中找到对象的内存地址。 因此,当您创建两个具有相同值的不同对象时,它们是不相等的!

List<List<Integer>> list1 = new ArrayList<>();
List<List<Integer>> list2 = new ArrayList<>();
list1==list2 //returns false

您可以实现一个equals函数,该函数将比较两个对象的值。

list1.equals(list2)