必须用 arrays.equals() 比较数组内容,因为 == 和 object 的 equals() 只比较引用地址;arrays.equals() 逐元素比较值或调用元素 equals(),支持 null 和长度检查;多维数组需用 arrays.deepequals()。

直接用 == 或 equals() 比较两个数组,结果几乎总是 false——因为它们比较的是引用地址,不是内容。要判断两个数组是否“内容完全相同”,必须用 Arrays.equals()。
为什么不能用 == 或对象的 equals()?
Java 中数组是对象,但它的 equals() 方法继承自 Object,没有被重写,所以仍比较内存地址。即使两个数组元素一模一样,只要不是同一个对象,a.equals(b) 就返回 false。
例如:
int[] a = {1, 2, 3};int[] b = {1, 2, 3};
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false(不是内容比较)
Arrays.equals() 的正确用法
Arrays.equals() 是专为数组内容比较设计的工具方法,支持所有基本类型数组和对象数组(要求元素自身能合理比较)。
- 对基本类型数组(如
int[]、double[]),逐个比较值是否相等 - 对引用类型数组(如
String[]),调用每个元素的equals()方法比较 - 自动处理
null:两个都为null→ 返回true;一个为null另一个非null→ 返回false - 长度不同直接返回
false,不继续比较
示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
int[] b = {1, 2, 3};
int[] c = {1, 2, 3, 4};
System.out.println(Arrays.equals(a, b)); // true
System.out.println(Arrays.equals(a, c)); // false
注意多维数组:要用 Arrays.deepEquals()
Arrays.equals() 对二维及以上数组无效——它只比较第一层引用。比如两个 int[][] 即使内容相同,也会返回 false。
此时必须用 Arrays.deepEquals(),它会递归比较每一层元素:
int[][] y = {{1, 2}, {3}};
System.out.println(Arrays.equals(x, y)); // false(只比外层数组引用)
System.out.println(Arrays.deepEquals(x, y)); // true(深入比内容)
对象数组比较的注意事项
对 String[]、Integer[] 等引用类型数组,Arrays.equals() 依赖元素自身的 equals() 实现:
-
String[]安全:字符串重写了equals(),按内容比较 -
CustomObj[]需确保类已正确重写equals()(和hashCode()) - 若数组含
null元素,Arrays.equals()能安全处理(不会空指针)
反例(未重写 equals 的自定义类):
class Person { String name; }Person[] p1 = {new Person()};
Person[] p2 = {new Person()};
System.out.println(Arrays.equals(p1, p2)); // false(默认比较引用)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










