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) 可限定比较区间,避免复制子数组:
- 前三个参数:源数组、起始索引(含)、结束索引(不含);
- 后三个参数:目标数组、起始索引(含)、结束索引(不含);
- 两段长度必须相等,否则抛
IllegalArgumentException。
适用场景:校验数组某块区域(如协议头、校验段)、跳过已知一致前缀等。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
处理 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 风格统一。
除非需自定义比较逻辑(如忽略大小写、浮点误差容限),否则优先用它。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










