比较数组是否相等
数组类型从 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
实例并存储列表。