判断数组内容相等需用arrays.equals()(一维)或arrays.deepequals()(多维),不可用==或默认equals();自定义对象须重写equals()和hashcode(),手动比较可用objects.equals()。

不能用 == 或默认的 equals(),因为它们比的是引用地址,不是内容。要判断两个数组内容是否完全相等,关键看维度和元素类型,选对工具才能一次到位。
一维数组:用 Arrays.equals()
这是最常用也最稳妥的方式,适用于所有基本类型数组(int[]、double[] 等)和对象数组(String[]、Person[] 等)。
- 自动处理
null:任一参数为null直接返回false,不抛异常 - 先判长度:长度不同立刻返回
false,不继续比较 - 逐元素比较:对基本类型用
==,对对象调用其equals()方法(所以自定义类必须重写equals) - 顺序敏感:
{null, "a"}和{"a", null}判定为不等
多维或嵌套数组:用 Arrays.deepEquals()
Arrays.equals() 对 int[][] 这类只比较外层数组引用,结果永远是 false;deepEquals() 才会递归进每一层比内容。
- 支持任意嵌套深度,比如
Object[][]里混着String和int[] - 对
null元素安全:子数组为null也能正确比,不会空指针 - 性能略低:因递归开销,简单场景不用它
自定义比较逻辑时:手动遍历 + Objects.equals()
当需要跳过某些字段、忽略顺序、容错浮点误差,或项目不允许依赖 Arrays 工具类时,可手写循环。
- 先判
null:两个都为null→true;仅一个为null→false - 再判长度:不等直接返回
false - 最后用
Objects.equals(a[i], b[i])比每个元素,自动处理null和非null的组合
自定义对象数组要注意 equals() 是否可靠
比如比较 Person[],最终靠每个 Person 实例的 equals() 方法。如果没重写,就退化成引用比较,结果不可信。
- 字段含字符串:别用
==,要用.equals() - 字段是数组:在
Person.equals()里要用Arrays.equals()或Arrays.deepEquals() - 配套重写
hashCode():虽不影响Arrays.equals(),但属于通用规范
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











