int[]数组调用equals()比较的是内存地址而非内容,因其未重写object的equals()方法,默认等价于==;正确方式是使用arrays.equals(a,b),它安全高效地逐元素比较内容。
![java中数组 `int[]` 的 equals() 方法比较的是什么内容](https://img.php.cn/upload/article/001/242/473/179064159892352.png?x-oss-process=image/resize,p_40)
Java 中 int[] 数组直接调用 equals() 方法,比较的是**数组对象的内存地址(引用)**,不是内容。
为什么 equals() 对 int[] 无效
数组类型(包括 int[])是引用类型,但 java.lang.Object 类的 equals() 方法没有被数组类重写。它的默认实现就是:
也就是说,它等价于 == 运算符——只判断两个变量是否指向堆中同一个数组对象。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
实际效果举例
-
int[] a = {1, 2, 3}; int[] b = {1, 2, 3};→a.equals(b)返回 false(内容相同,但对象不同) -
int[] c = a;→a.equals(c)返回 true(指向同一块内存) -
int[] d = null;→a.equals(d)抛出 NullPointerException(因为调用方不能为 null)
正确比较 int[] 内容的方式
必须使用 java.util.Arrays.equals(int[], int[]):
- 自动处理
null:两个都为null返回true;一个为null另一个非null返回false - 先比长度,再按索引逐个比每个
int值 - 一行代码安全可靠:
Arrays.equals(a, b)
常见误区提醒
别写这些:
-
a == b→ 比地址,不是内容 -
a.equals(b)→ 同上,本质还是地址比较,且可能空指针 -
Arrays.toString(a).equals(Arrays.toString(b))→ 能工作但低效(构造字符串开销大)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










