Java中数组转List最推荐Arrays.asList(),但需注意:引用类型数组返回固定大小List,不支持增删;基本类型数组需先转包装类;null数组会抛NPE,应预先判空。

Java 中数组转 List 最常用、最推荐的方式是使用 Arrays.asList(),但它有细节需要注意,否则容易踩坑。
用 Arrays.asList() 快速转换(适合基本场景)
这是最简洁的方法,适用于数组元素非 null 且后续不增删元素的场景:
- 对引用类型数组(如 String[]、Integer[])直接调用:
Arrays.asList(arr) - 返回的是一个固定大小的 List(底层是 Arrays 的内部类),不支持 add/remove/clear 等结构性修改操作,否则抛 UnsupportedOperationException
- 原始类型数组(如 int[])不能直接用 —— 因为泛型不支持基本类型,
Arrays.asList(new int[]{1,2,3})实际会把整个 int[] 当作单个元素,结果是含一个 int[] 对象的 List
需要可变 List?包装一层 ArrayList
如果后续要 add、remove 或确保线程安全无关,推荐包装成真正的 ArrayList:
List<String> list = new ArrayList<>(Arrays.asList(strArray));List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));- 这样得到的 list 支持所有标准操作,且与原数组无引用关系(修改 list 不影响原数组)
处理基本类型数组(int[]、double[] 等)
必须先转为对应的包装类型数组,再用 Arrays.asList():
立即学习“Java免费学习笔记(深入)”;
- Java 8+ 推荐用 Stream:
List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList()); - 手动转换(小数组可用):
Integer[] boxed = Arrays.stream(intArray).boxed().toArray(Integer[]::new); List<Integer> list = new ArrayList<>(Arrays.asList(boxed)); - 避免直接传 int[] 给 asList(),否则 List 大小为 1,元素是那个 int[] 引用
注意 null 和空数组情况
Arrays.asList(null) 会生成含一个 null 元素的 List;空数组 new String[0] 转出来是空 List,没问题。但要注意:
- 如果数组本身是 null,调用 asList() 会直接抛 NullPointerException
- 建议加空检查:
if (arr != null) list = new ArrayList<>(Arrays.asList(arr));


















