为什么assertEquals(new int [] {1},new int [] {1})会导致失败?

Mar*_*ras 2 java junit unit-testing equals

我正在测试我的洗牌课,遇到了一个我无法理解的问题.为什么以下assert声明:

assertEquals(new int[]{1}, new int[]{1}); 
Run Code Online (Sandbox Code Playgroud)

结果是AssertionError?当然,正确的答案是"因为他们不平等!",但有人能解释我为什么吗?以及如何测试一个方法,我希望两个这样的对象相等?

Jon*_*eet 5

但有人可以解释我为什么

当然 - 数组不会覆盖equals,因此它们继承了行为Object,其中任何两个不同的对象都是不相等的.

如果你使用0元素数组,它甚至比你展示的版本更简单:

System.out.println(new int[0].equals(new int[0])); // false
Run Code Online (Sandbox Code Playgroud)

这就是为什么在检查您使用的非测试代码Arrays.equals中的相等性时,以及在检查测试代码中的相等性时,您使用专用assertXyz方法(其中确切的方法取决于JUnit的版本等).