应使用 arrays.equals() 判断一维数组内容是否相同,它比较长度和对应元素值(基本类型用==,对象调用equals)并处理null;二维及以上用 arrays.deepequals() 递归比较;禁用 == 和数组原生 equals()。

Java 中判断两个数组内容是否完全相同,不能直接用 == 或 equals()(除非是包装类且用 Arrays.equals()),因为数组对象的 equals() 继承自 Object,比较的是引用地址。
用 Arrays.equals() 判断基本类型或对象数组
这是最常用、最推荐的方式,适用于所有一维数组(包括基本类型和引用类型):
- 对
int[]、String[]、Integer[]等都有效 - 要求两个数组长度相等,且每个对应位置元素按
equals()规则相等(对基本类型是值相等,对对象调用其equals()方法) - 自动处理
null:两个都为null返回true;一个为null另一个非null返回false
示例:
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
boolean same = Arrays.equals(a, b); // true
String[] s1 = {"a", "b"};
String[] s2 = {"a", "b"};
boolean sameStr = Arrays.equals(s1, s2); // true
二维及以上数组用 Arrays.deepEquals()
如果数组嵌套了(比如 int[][]、String[][] 或含对象数组的数组),Arrays.equals() 只比较子数组的引用,无法深入比内容。此时必须用:
Arrays.deepEquals(Object[] a, Object[] b)- 它会递归调用
deepEquals或equals,适合任意维度的数组(只要顶层是Object[]类型) - 注意:基本类型二维数组(如
int[][])会被自动转为Object[](每个元素是int[]),所以能用
示例:
int[][] m1 = {{1, 2}, {3}};
int[][] m2 = {{1, 2}, {3}};
boolean deepSame = Arrays.deepEquals(m1, m2); // true
手动遍历(仅限特殊场景)
一般不建议手写循环,但如果你需要:
- 自定义比较逻辑(比如忽略大小写、容错浮点误差)
- 在不引入
java.util.Arrays的极简环境(如某些嵌入式或教学场景) - 做部分比较或提前终止(如大数据量时快速发现不同)
基础写法要点:
- 先判长度是否相等
- 再逐个索引比较,注意处理
null和引用类型的equals() - 基本类型可直接用
==,但float/double建议用Float.compare()避免 NaN 问题
常见误区提醒
不要用 a.equals(b) —— 数组没有重写 equals(),实际等价于 a == b。
不要用 Objects.equals(a, b) —— 它只判断引用是否同或都为 null,不比较内容。
注意泛型集合 vs 数组:如果是 List,直接用 list1.equals(list2) 即可,它内部已按顺序逐个比较。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











