Arrays.equals用于判断一维数组内容是否相等,先判空、再比长度、最后逐元素调用Objects.equals比较;二维数组需用Arrays.deepEquals;它不同于==和Objects.equals,后者仅比较引用。

Arrays.equals 是 Java 中用于判断两个数组是否“内容相同”的最常用方法,它比较的是元素值是否一一对应相等,而不是引用是否相同。
基本用法:一维数组比较
对基本类型(如 int、double)或引用类型(如 String)的一维数组,直接调用 Arrays.equals(arr1, arr2) 即可。该方法会先检查数组是否都为 null,再检查长度是否相等,最后逐个比较对应位置的元素(对引用类型使用 equals() 方法)。
- 如果两个数组都为
null,返回true - 如果一个为
null、另一个不为null,返回false - 如果长度不同,直接返回
false - 长度相同则逐个调用
Objects.equals(a[i], b[i])比较
示例:
int[] a = {1, 2, 3};int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); // true
String[] x = {"a", "b"};
String[] y = {"a", "b"};
System.out.println(Arrays.equals(x, y)); // true
注意:二维及以上数组不能用 Arrays.equals
Arrays.equals 只适用于一维数组。对二维数组(如 int[][]),它只会比较外层数组中每个元素(即内层数组的引用)是否相等,不会递归比较内部元素——这通常不是你想要的结果。
立即学习“Java免费学习笔记(深入)”;
正确做法是使用 Arrays.deepEquals:
int[][] m2 = {{1, 2}, {3}};
System.out.println(Arrays.equals(m1, m2)); // false(引用不同)
System.out.println(Arrays.deepEquals(m1, m2)); // true(内容相同)
与 == 和 Objects.equals 的区别
== 比较的是数组对象的内存地址;Objects.equals(arr1, arr2) 在数组上实际退化为 ==(因为数组没重写 equals()),所以都不能代替 Arrays.equals。
-
arr1 == arr2→ 判断是否同一个数组对象 -
Objects.equals(arr1, arr2)→ 效果等同于arr1 == arr2 -
Arrays.equals(arr1, arr2)→ 判断内容是否相同
泛型数组?没有直接支持,需手动处理
Java 数组不支持泛型(如 List<String>[] 是合法的,但 ArrayList<String>[] 需绕过类型擦除限制)。若数组元素是自定义类,确保该类正确重写了 equals()(和 hashCode()),否则 Arrays.equals 中的元素比较会退化为引用比较。
例如:
class Person {String name;
int age;
// 必须重写 equals 和 hashCode
}


















