比较数组是否相等

数组类型从 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)); //prints "false" because a and b refer to different objects
System.out.println(Arrays.equals(a, b)); //prints "true" because the elements of a and b have the same values

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

int a[] = { 1, 2, 3 };
int b[] = { 1, 2, 3 };

Object[] aObject = { a }; // aObject contains one element
Object[] bObject = { b }; // bObject contains one element

System.out.println(Arrays.equals(aObject, bObject)); // false
System.out.println(Arrays.deepEquals(aObject, bObject));// true

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