我在测试洗牌类(class)时遇到了一个我无法理解的问题。为什么以下 assert
语句:
assertEquals(new int[]{1}, new int[]{1});
导致 AssertionError
?自然,正确答案是“因为它们不相等!”,但有人能解释一下为什么吗?以及如何测试我希望两个这样的对象相等的方法?
最佳答案
but could someone explain me why
当然 - 数组不会覆盖等于,因此它们从 Object
继承行为,其中任何两个不同的对象都是不相等的。
如果您使用 0 元素数组,它甚至比您显示的版本更简单:
System.out.println(new int[0].equals(new int[0])); // false
这就是为什么在非测试代码中检查相等性时使用 Arrays.equals
,而在测试代码中检查相等性时使用专用的 assertXyz
方法(其中确切的方法取决于 JUnit 等的版本)。
关于java - 为什么 assertEquals(new int[]{1}, new int[]{1}) 会导致失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936103/