Arrays.mismatch()返回首个不相等元素索引,完全相等时返回-1;支持所有基本类型和Object[],对null安全,且经底层优化性能更优。

Arrays.mismatch() 是 Java 9 引入的实用方法,专为高效比较两个数组而设计,能直接返回**首个不相等元素的索引**(从 0 开始),无需手动遍历。它支持所有基本类型数组(int[]、byte[] 等)和 Object[],且对 null 安全(空数组或 null 输入会按规则处理)。
基础用法:直接比较完整数组
最简单场景:两个同类型、同长度(或不同长度)的数组,想快速知道从哪开始“对不上”:
- 若数组完全相同,返回
-1; - 若存在差异,返回**最小索引 i**,满足
a[i] != b[i](对引用类型调用equals()); - 若一个数组更短,且前缀完全匹配,则返回该较短数组的长度(即越界位置)。
示例:
int[] a = {1, 2, 3, 4};int[] b = {1, 2, 5, 6};
int idx = Arrays.mismatch(a, b); // 返回 2 —— a[2]=3 ≠ b[2]=5
指定范围比较:只看某一段
用重载方法 Arrays.mismatch(T[], int, int, T[], int, int) 可限定比较区间,避免复制子数组:
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 前三个参数:源数组、起始索引(含)、结束索引(不含);
- 后三个参数:目标数组、起始索引(含)、结束索引(不含);
- 两段长度必须相等,否则抛
IllegalArgumentException。
适用场景:校验数组某块区域(如协议头、校验段)、跳过已知一致前缀等。
处理 null 和边界情况
该方法明确约定行为,省去手动判空:
- 任一数组为
null→ 返回 0(视为第一个位置就不匹配); - 两数组都为
null→ 返回 -1(视为相等); - 一个为空数组
{},另一个非空 → 返回 0(空数组在索引 0 就“缺元素”); - 比较时若遇到
null元素(如String[]中有null),则按Objects.equals()规则判断(null == null为 true,null == "x"为 false)。
对比手写循环:为什么更推荐?
手动实现需写 5–10 行,易漏边界、空指针、类型转换;而 mismatch():
- 底层高度优化(如
int[]使用向量化指令); - 语义清晰,一行表达意图;
- 自动处理
null、长度不等、泛型擦除等细节; - 与
Arrays.equals()、Arrays.compare()保持 API 风格统一。
除非需自定义比较逻辑(如忽略大小写、浮点误差容限),否则优先用它。

















