arrays.deepequals 是 java 中用于多维数组深层相等比较的方法,递归比对嵌套元素;而 arrays.equals 仅支持一维数组浅层比较,对多维数组会误判为 false。

Arrays.deepEquals 是 Java 中专门用于比较多维数组是否“深层相等”的工具方法。它能递归地比较嵌套数组的每个元素,而不仅仅是引用或一维数组的浅层内容。
deepEquals 与 equals 的关键区别
普通 Arrays.equals() 只能正确处理一维数组;对二维及以上数组,它会把子数组当作 Object 引用比较,结果几乎总是 false(除非两个位置指向同一个子数组对象)。而 deepEquals() 会自动识别数组类型,对每个嵌套层级都做递归展开和逐元素比对。
基本用法:支持任意维度和混合类型
该方法接受两个 Object 类型参数,因此可传入任意维数的数组(包括 int[]、String[][]、Object[][][] 等),甚至允许数组内包含 null 或其他非数组元素。
- 如果两个参数都是 null,返回 true
- 如果一个是 null,另一个不是,返回 false
- 如果都不是 null,但类型不同(如 int[] vs String[]),返回 false
- 如果是同类型数组,则递归比较每个元素:基本类型直接 ==,引用类型调用 deepEquals 或 equals
实际示例:验证二维与三维数组相等性
以下代码演示典型场景:
int[][] a = {{1, 2}, {3, 4}};
int[][] b = {{1, 2}, {3, 4}};
int[][] c = {{1, 2}, {3, 5}};
System.out.println(Arrays.deepEquals(a, b)); // true
System.out.println(Arrays.deepEquals(a, c)); // false
// 三维数组同样适用
String[][][] x = {{{"a"}, {"b"}}, {{"c"}}};
String[][][] y = {{{"a"}, {"b"}}, {{"c"}}};
System.out.println(Arrays.deepEquals(x, y)); // true
注意事项与常见陷阱
使用时需注意几点:
- 数组元素若为自定义对象,其类必须正确重写 equals()(deepEquals 在遇到非数组引用时会调用其 equals 方法)
- 不支持泛型数组的编译期类型检查(如 List
[]),但运行时仍可比较 - 性能略低于 Arrays.equals(因递归开销),但对多数业务场景影响可忽略
- 浮点数比较仍基于 ==,NaN 与任何值(含自身)都不相等,需预处理
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











