Java变长参数(Varargs)通过“类型...参数名”语法实现,本质是语法糖,编译后为数组,只能位于参数列表末尾且唯一;支持零个、多个同类型实参或显式展开数组调用,但不可与同类型数组参数重载。

Java 中用 变长参数(Varargs) 处理不确定个数的输入,核心是使用 类型... 参数名 语法,底层自动转为数组,调用时可传零个、一个或多个同类型实参,也可直接传数组(需加 ... 显式展开)。
定义变长参数方法
在方法参数列表末尾用 ... 声明,只能有一个且必须是最后一个参数。例如:
public static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
调用方式灵活:
• sum() → 传空数组
• sum(1) 或 sum(1, 2, 3) → 自动装箱为 int[]
• sum(new int[]{1, 2, 3}) → 直接传数组(但注意:不加 ... 会触发重载歧义,需确保无其他匹配方法)
立即学习“Java免费学习笔记(深入)”;
与普通数组参数共存时的注意事项
变长参数本质是语法糖,编译后仍是数组类型,因此不能和同类型数组参数重载。以下写法非法:
void print(String... s) {}
void print(String[] s) {} // 编译错误:重复方法签名
若需同时支持单个值、多个值和数组,可只保留变长参数,内部统一处理:
• 传 print("a") → s 是长度为 1 的数组
• 传 print("a", "b") → s 是长度为 2 的数组
• 传 print((String[])null) 或显式传数组(加 ...)→ 需谨慎判空
实际使用建议
- 变长参数适合“零到多个同类型附加参数”场景,比如日志、格式化、工具类集合操作
- 避免在已有多个参数的方法末尾随意加
...,尤其当后续可能扩展参数时,易引发调用歧义 - 若参数逻辑上分组(如“标题 + 内容 + 标签”),优先考虑封装为对象,而非堆砌变长参数
- 性能敏感场景中,变长参数每次调用都会新建数组,高频调用可考虑重载固定参数版本(如
sum(int a),sum(int a, int b))作优化


















