arrays.equals 是 java 中判断数组相等的正确方式,逐个比较长度和对应元素(基本类型比值,引用类型调用 equals);== 和数组自带 equals() 均比较地址,不可用;多维数组需用 arrays.deepequals。

Arrays.equals 是 Java 中最常用、最推荐的数组相等性判断方式,它会逐个比较两个数组的长度和每个对应位置的元素是否相等(对基本类型直接比值,对引用类型调用 equals() 方法)。
必须用 Arrays.equals,不能用 == 或 equals() 方法
数组是对象,但它的 equals() 方法继承自 Object,只比较引用地址;== 也是比较内存地址。即使两个数组内容完全一样,只要不是同一个对象,结果就是 false。
例如:
❌ 错误写法:int[] a = {1, 2, 3};<br>int[] b = {1, 2, 3};<br>System.out.println(a == b); // false<br>System.out.println(a.equals(b)); // false
基本类型数组:直接传入两个数组即可
对于 int[]、double[]、boolean[] 等,Arrays.equals 有重载方法,自动处理原始类型比较。
- 两个数组都为
null→ 返回true - 一个为
null,另一个不为null→ 返回false - 长度不同 → 返回
false - 长度相同且所有对应元素相等 → 返回
true
示例:
int[] a = {1, 2, 3};<br>int[] b = {1, 2, 3};<br>int[] c = {1, 2, 4};<br><br>System.out.println(Arrays.equals(a, b)); // true<br>System.out.println(Arrays.equals(a, c)); // false<br>System.out.println(Arrays.equals(a, null)); // false
引用类型数组:依赖元素自身的 equals 实现
比如 String[]、Integer[]、自定义类数组等,Arrays.equals 会调用每个元素的 equals() 方法。因此,确保元素类正确重写了 equals()(和 hashCode())很重要。
- 如果某个元素为
null,另一数组对应位置也是null→ 视为相等 - 如果某处一个是
null,另一个是非null对象 → 不相等 - 如果两个都是非
null,则调用element1.equals(element2)
示例:
String[] s1 = {"a", "b", null};<br>String[] s2 = {"a", "b", null};<br>String[] s3 = {"a", "b", "c"};<br><br>System.out.println(Arrays.equals(s1, s2)); // true<br>System.out.println(Arrays.equals(s1, s3)); // false
多维数组要用 Arrays.deepEquals
Arrays.equals 对二维及以上数组只比较“第一层”引用,不会递归比较内部数组内容。要真正比较嵌套结构,必须用 Arrays.deepEquals。
int[][] m1 = {{1, 2}, {3}};<br>int[][] m2 = {{1, 2}, {3}};<br><br>System.out.println(Arrays.equals(m1, m2)); // false(比较的是两个 int[] 引用)<br>System.out.println(Arrays.deepEquals(m1, m2)); // true(递归比较每个子数组)Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











