Java可变参数(Varargs)用...声明,必须位于参数列表末尾且最多一个,本质是数组,支持零到多个同类型参数,调用简洁但需注意重载限制与泛型擦除问题。

Java 中用 可变参数(Varargs) 可以让一个方法接收任意数量的同类型参数,不用手动封装数组或集合,写法简洁、调用直观。
语法:用三个点(...)声明参数
在方法参数列表末尾,用 类型后加 ... 表示该参数是可变的。编译器会自动将传入的多个实参打包成数组。
- 必须是参数列表中最后一个参数
- 一个方法最多只能有一个 varargs 参数
- 本质仍是数组,方法体内按数组方式访问(如
args.length、args[i])
基本用法示例
比如实现一个求和方法:
public static int sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
调用时可以传 0 个、1 个或多个 int 值:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
sum()→ 返回 0(numbers是长度为 0 的数组) -
sum(5)→numbers = {5} -
sum(1, 2, 3, 4)→numbers = {1, 2, 3, 4}
与普通参数混合使用
varargs 必须放在最后,但前面可以有其他固定参数:
public static void print(String prefix, int... values) {
System.out.print(prefix + ": ");
for (int v : values) {
System.out.print(v + " ");
}
System.out.println();
}
调用:print("Result", 10, 20, 30) 输出 Result: 10 20 30。
注意事项和常见误区
虽然方便,但要注意几点:
- 不能重载两个仅靠 varargs 区分的方法,例如
foo(int...)和foo(int[])会编译报错 - 调用时如果已有数组,可直接传入,无需拆包:
int[] arr = {1,2,3}; foo(arr); - 泛型方法支持 varargs,但存在类型擦除问题,需谨慎(如
<T> void show(T... items))
不复杂但容易忽略细节,掌握好能显著提升代码可读性和灵活性。

















