数组类型从 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