Java如何判断两个数组是否相等

数组类型从 java.lang.Object 继承了它们的 equals()(和 hashCode())实现,因此 equals() 仅在与完全相同的数组对象进行比较时才返回 true。
要根据数组的值比较数组的相等性,请使用 java.util.Arrays.equals,它为所有数组类型重载。

int[] a = new int[]{1, 2, 3};
int[] b = new int[]{1, 2, 3};
System.out.println(a.equals(b));         //将输出“false”,因为a和b引用不同的对象
System.out.println(Arrays.equals(a, b)); //将输出“true”,因为 a 和 b 的元素具有相同的值

当元素类型为引用类型时,Arrays.equals() 对数组元素调用 equals() 以确定相等性。
特别是,如果元素类型本身是数组类型,则将使用恒等比较。
要比较多维数组的相等性,请使用 Arrays.deepEquals() 代替,如下所示:

int a[] = { 1, 2, 3 };
int b[] = { 1, 2, 3 };
Object[] aObject = { a }; //aObject 包含一个元素
Object[] bObject = { b }; //bObject 包含一个元素
System.out.println(Arrays.equals(aObject, bObject));    //false
System.out.println(Arrays.deepEquals(aObject, bObject));//true

因为集合和映射使用 equals() 和 hashCode(),所以数组通常不能用作集合元素或者映射键。
或者将它们包装在一个根据数组元素实现 equals() 和 hashCode() 的帮助器类中,或者将它们转换为 List 实例并存储列表。

日期:2020-06-02 22:15:20 来源:oir作者:oir