来自 Arrays.equals的Java文档(Object [] a,Object [] a2):
如果两个指定的Objects数组等于1,则返回 true 另一个。如果两个数组都包含,则认为两个数组相等 相同数量的元素和所有相应的元素对 在两个数组中是相等的。
但是当我运行下面的程序时,它正在打印false
。
equals
类的Array
方法是否不适用于多维数组?
在下面的程序中,我可以用什么API来实现true
?
public class Test {
public static void main(String[] args) {
String[][] rows1 = { new String[] { "a", "a" } };
String[][] rows2 = { new String[] { "a", "a" } };
System.out.println("Arrays.equals() = " + Arrays.equals(rows1, rows2));
}
}
答案 0 :(得分:29)
您正在比较二维数组,这意味着这些数组的元素本身就是数组。因此,在比较元素时(使用Object
的{{1}}),会返回equals
,因为false
的{{1}}比较Object
引用。
改为使用equals
。
来自Javadoc:
boolean java.util.Arrays.deepEquals(Object [] a1,Object [] a2)
如果两个指定的数组彼此非常相等,则返回true。与equals(Object [],Object [])方法不同,此方法适用于任意深度的嵌套数组。
答案 1 :(得分:8)
Arrays.equals
。
这就是equals
无效的原因。正如文档所说,数组必须具有相同数量的元素,并且元素必须是等于的。数组确实具有相同数量的元素:1。每个元素都是另一个数组。
但是,将这些数组与常规equals
方法进行比较。对于任何对象,如果对象没有覆盖为Object
定义的equals
方法,则使用为Object
定义的equals
方法,即与==相同。并且数组不会覆盖toString()
(它们也不会覆盖Arrays.toString()
,这就是我们必须使用Arrays.deepEquals()
格式化数组的原因。
Arrays.deepEquals()
对元素何时为数组进行特殊检查,然后使用递归CommonGreeting
来测试这些数组是否相等。
答案 2 :(得分:0)
由于您使用new
初始化两个不同的对象,因此无法正常工作。
来自Java Docs:
boolean java.util.Arrays.equals(Object[] a, Object[] a2)
如果两个指定的Objects数组等于1,则返回true 另一个。如果两个数组都包含,则认为两个数组相等 相同数量的元素和所有相应的元素对 在两个数组中是相等的。考虑两个对象e1和e2 等于if(e1 == null?e2 == null:e1.equals(e2))。换句话说, 如果两个数组包含相同的元素,则它们是相等的 订购。此外,如果两个数组引用都相同,则认为它们相等 空。
参数:一个要测试相等的数组a2另一个数组 要进行相等测试返回:如果两个数组相等则为true
答案 3 :(得分:0)
请参阅 Arrays.equals vs Arrays.deepEquals