Arrays.compare()在Java 9引入,用于字典序比较同类型数组,返回负数、0或正数表示大小关系;支持所有基本类型和对象数组,自动类型推断;明确处理null数组及元素;非等值判断,性能优于手动循环。

Arrays.compare() 在 Java 9 引入,专门用于按字典序(lexicographic order)比较两个**同类型**数组的大小关系,返回一个整数表示相对顺序:负数表示第一个数组“小于”第二个,0 表示相等,正数表示“大于”。它比手动遍历更简洁、安全,且对 null 有明确定义。
支持的数组类型与基本用法
该方法是重载的泛型方法,覆盖所有基本类型数组(int[]、double[] 等)和对象数组(String[]、Integer[] 等)。调用时无需指定类型,编译器自动推断:
-
Arrays.compare(new int[]{1, 2}, new int[]{1, 3}) → -1(前缀相同,2 < 3) Arrays.compare(new String[]{"a", "b"}, new String[]{"a", "c"}) → -1-
Arrays.compare(new int[]{1, 2, 3}, new int[]{1, 2}) → 1(前两个元素相等,但前者更长)
空值与边界情况处理
Java 9+ 的设计明确处理了 null 数组:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 两个数组都为
null→ 返回 0 - 仅第一个为
null→ 返回 -1(null被视为“最小”) - 仅第二个为
null→ 返回 1 - 元素级比较时,若为对象数组且某位置元素为
null,则按Comparator.nullsFirst(Comparator.naturalOrder())规则处理(即null小于任何非空对象)
与 Arrays.equals() 和传统循环的区别
注意:Arrays.compare() 不是判断是否相等,而是提供三值序关系;而 Arrays.equals() 只返回布尔值。若你只需要“是否相等”,仍用 equals() 更语义清晰。相比手写循环:
立即学习“Java免费学习笔记(深入)”;
- 避免
ArrayIndexOutOfBoundsException风险(内部已做长度检查) - 对基本类型不发生装箱,性能更好
- 对象数组默认使用元素的自然序,无需额外传入
Comparator(如需自定义顺序,应改用Arrays.compare(T[], T[], Comparator))
实际判断逻辑(字典序规则)
比较过程严格遵循字典序定义:
- 逐个索引比较对应位置元素
- 遇到第一个不相等的位置,按该位置两元素的比较结果决定整体结果
- 若所有较短数组的元素都相等,则较短者“小于”较长者
- 例如:
compare([1,2], [1,2,0]) → -1,因为前两个相等,但第一个数组已结束

















