Arrays.sort()对基本类型数组不装箱,而是提供独立重载方法(如sort(int[])),直接用双轴快排原地排序;返回void,不支持Comparator,需手动装箱才能用泛型功能。

Arrays.sort() 不会对基本类型数组进行自动装箱,也不会把 int[]、double[] 等自动转成 Integer[] 或 Double[]。它根本就不是靠“装箱”来工作的。
它针对基本类型数组提供了独立的重载方法,比如:
Arrays.sort(int[])Arrays.sort(double[])Arrays.sort(char[])- ……等等
这些方法是专门实现的原生排序逻辑(底层用双轴快排),直接操作内存中的数值,不经过对象创建、不触发装箱、也不依赖 Comparable 接口。
所以:
- ✅
int[] arr = {3, 1, 4}; Arrays.sort(arr);→ 合法、高效、原地修改 - ❌
Arrays.sort(arr).stream()→ 编译失败:Arrays.sort(int[])返回void,且int[]无法自动变成Stream<Integer> - ❌
Arrays.sort(arr, Collections.reverseOrder())→ 编译失败:基本类型重载不接受 Comparator
需要装箱的场景,是你主动想用泛型能力时才发生,例如:
-
想降序排列 → 得先手动装箱:
int[] nums = {3, 1, 4}; Integer[] boxed = Arrays.stream(nums).boxed().toArray(Integer[]::new); Arrays.sort(boxed, Collections.reverseOrder()); 想传给某个只接收
Comparable[]的方法 → 也得自己装箱,Arrays.sort()不代劳。
关键点总结:
-
Arrays.sort(int[])和Arrays.sort(Integer[])是两个完全不同的方法,签名不同、实现不同、行为不同 - 基本类型数组排序 ≠ 装箱 + 引用类型排序,前者更快更轻量
- 自动装箱发生在赋值或方法调用参数匹配时(如
Integer i = 5;),但Arrays.sort(int[])这个调用本身不触发任何装箱动作
如果看到代码里写了 Arrays.sort(new int[]{}) 却没报错,不是因为“它悄悄装箱了”,而是因为它精准匹配到了 sort(int[]) 这个重载。

















