Java中的匿名数组是不声明变量名、直接创建并使用的数组,语法为new类型[]{元素},常用于方法调用、集合初始化等场景,每次执行都新建对象且不可复用,不支持泛型具体化,基本类型与包装类型数组不能混用。

Java 中的匿名数组是指不声明变量名、直接创建并使用的数组,常用于方法调用、集合初始化或临时数据构造等场景。它本质是 new 类型[]{...} 的简写形式,省去中间变量,代码更紧凑。
匿名数组的基本写法
语法固定为 new 类型[]{元素1, 元素2, ...},类型必须明确,大括号内是具体值:
-
new int[]{1, 2, 3}—— 创建含三个整数的 int 数组 -
new String[]{"a", "b"}—— 创建含两个字符串的 String 数组 -
new double[]{}或new int[0]—— 创建空数组(长度为 0,不是null)
作为方法参数直接传入
这是最常见用途,尤其适配接收数组或 varargs 参数的方法:
- 调用普通数组参数方法:
printArray(new int[]{10, 20, 30}); - 调用可变参数(varargs)方法:
Arrays.asList(new Integer[]{1, 2, 3});(注意类型需匹配,new Object[]{...}不会自动拆包) - 避免歧义:若方法有多个重载(如
void f(Object)和void f(String...)),传new String[]{...}才会命中 varargs 版本
配合工具类快速构造集合
匿名数组常与标准库工具链结合,简化一次性集合构建:
立即学习“Java免费学习笔记(深入)”;
List<String> list = Arrays.asList(new String[]{"x", "y", "z"});Stream<Integer> stream = Stream.of(new Integer[]{1, 2, 3});- 注意:像
Set.of(...)或List.of(...)本身支持 varargs,无需数组;但若已有数组变量或需从数组出发,仍可先用匿名数组再流转
使用时要注意的限制
匿名数组虽方便,但有几处关键约束需留意:
- 每次执行都新建对象,不可复用,频繁调用可能影响性能
- 不支持泛型具体化:不能写
new ArrayList<String>[]{}(编译报错),只能用原始类型如new List[]{...} - 基本类型数组(如
int[])和包装类型数组(如Integer[])不能混用,也不自动装箱 - 数组长度固定,无法增删元素;赋值给变量后,该变量只是引用新数组,原匿名数组无其他访问路径


















