Java 数组转 List 需区分引用类型数组(如 String\[\]、Integer\[\])与基本类型数组(如 int\[\]),且必须明确是否需要可变操作(add/remove)。
一、引用类型数组(T\[\] → List<T>)

⚠️ 注意:Arrays.asList(int\[\]) 会将整个 int\[\] 视为单个元素,返回 List<int\[\]>(size=1),不是 List<Integer>。
二、基本类型数组(如 int\[\] → List<Integer>)
Java 8+ 标准方式(自动装箱,返回可变 List):
java
List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList());
支持 int\[\]、long\[\]、double\[\];其他基本类型需手动循环或先转包装类数组。
JDK 9+ 中 Collectors.toList() 不保证返回 ArrayList,若需明确可变性可再包一层:
new ArrayList<>(Arrays.stream(...).boxed().collect(Collectors.toList()))
第三方库替代(需引入依赖):
Guava:new ArrayList<>(Ints.asList(intArray))(仍不可变,需二次包装)
FastUtil:IntArrayList.wrap(intArray)(零拷贝,但非标准 java.util.List)
三、常见错误规避
❌ Arrays.asList(new int\[\]{1,2,3}) → 得到 List<int\[\]>(size=1)
❌ 直接对 Arrays.asList() 结果调用 add() → 运行时异常
✅ 原则:只要后续可能修改列表,务必用 new ArrayList<>(...) 包裹
注:List.of()(Java 9+)返回不可变列表,不适合需动态操作的场景;基本类型数组不能直接传入 List.of()。