最安全常用的方式是用 toArray(T[]) 方法并传入类型匹配且长度足够的数组,如 list.toArray(new String[0]);不可强转 Object[],基本类型需手动映射转换。

Java 中 ArrayList 转数组最安全、最常用的方式是用 toArray(T[]) 方法并传入一个**类型匹配且长度足够的数组**,而不是直接用无参的 toArray()(它返回 Object[],强转会报 ClassCastException)。
✅ 正确写法:传入泛型类型的空数组
这是推荐的标准写法,简洁且类型安全:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
// ✅ 正确:传入 new String[0] 或 new String[list.size()]
String[] arr = list.toArray(new String[0]); // 推荐用 [0],JDK 11+ 更高效
// 或 String[] arr = list.toArray(new String[list.size()]);
说明:
-
new String[0]是惯用写法,JVM 会根据 list 实际大小创建新数组,不浪费空间; - 传
new String[list.size()]也可以,但如果 list 后续扩容,这个预分配数组会被丢弃,实际效果一样; - 数组类型必须和 ArrayList 的泛型类型一致(如
String),否则编译不通过。
❌ 常见错误:直接强转 Object[]
下面这种写法在运行时一定会抛 ClassCastException:
立即学习“Java免费学习笔记(深入)”;
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
List<String> list = new ArrayList<>();
list.add("hello");
// ❌ 错误!toArray() 返回 Object[],不能强转为 String[]
String[] arr = (String[]) list.toArray(); // 运行时报错
原因:toArray() 无参方法永远返回 Object[],而 Object[] 和 String[] 是不同运行时类型,Java 不允许向下强转数组引用。
⚠️ 注意点:基本类型要额外处理
ArrayList 不能存基本类型(如 int),只能存包装类(Integer)。所以:
- 想转成
int[]?不能直接转,得手动遍历或用 Stream:
List<Integer> list = Arrays.asList(1, 2, 3); int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
- 没有类似
toArray(int[])的快捷方法,必须自己映射转换。
? 小技巧:配合 var(Java 10+)更简洁
如果用较新 JDK,可结合 var 减少冗余:
List<Double> list = List.of(1.1, 2.2); var arr = list.toArray(new Double[0]); // arr 类型自动推导为 Double[]
清晰、安全、无警告。
不复杂但容易忽略——关键就一条:别用 toArray(),改用 toArray(T[]) 并传对类型的空数组。

















