Java动态变长参数(Varargs)本质是数组,用“...”声明且须位于参数列表末尾,支持传入0个或多个同类型实参;方法内按数组操作,可获取长度、遍历或索引访问。

Java 中的动态变长参数(Varargs)允许方法接收任意数量的同类型参数,底层本质是数组,因此非常适合用于替代手动传入数组或处理不确定个数的输入。
Varargs 的基本语法和规则
使用 三个英文点号(...) 声明变长参数,必须放在方法参数列表的最后位置。编译器会自动将传入的多个实参封装成一个数组。
- 声明格式:
public void method(Type... name),例如void printNumbers(int... nums) - 调用时可传 0 个、1 个或多个对应类型的值:
printNumbers()、printNumbers(5)、printNumbers(1, 2, 3, 4) - 不能有多个 Varargs 参数;若需其他参数,必须放在 Varargs 之前
Varargs 方法内部如何操作参数
方法体内,Varargs 形参被当作普通数组使用,支持长度获取、遍历、索引访问等所有数组操作。
-
nums.length获取实际传入的参数个数 - 可用 for-each 循环:
for (int n : nums) { ... } - 也可用传统 for 循环:
for (int i = 0; i - 注意:即使没传参数,
nums也不会为null,而是长度为 0 的空数组
与显式数组传参的区别和兼容性
Varargs 方法既能接受多个独立参数,也能直接传一个已有的数组——但需加 ... 显式展开(否则会被当作单个对象传入)。
立即学习“Java免费学习笔记(深入)”;
- 正确展开数组:
int[] arr = {10, 20}; printNumbers(arr<strong>...</strong>); - 错误写法(把整个数组当做一个 Object):
printNumbers(arr);→ 编译报错(类型不匹配) - 重载时注意:如果同时存在
method(int...)和method(int[]),调用method(new int[]{})会优先匹配int[]版本
实用示例:求和与日志打印
常见场景中,Varargs 让接口更简洁自然:
-
求和方法:
static int sum(int... values) { int s = 0; for (int v : values) s += v; return s; }
调用:sum(1, 2)、sum(1, 2, 3, 4, 5)、sum()(返回 0) -
带前缀的日志打印:
static void log(String prefix, String... msgs) { System.out.print("[" + prefix + "] "); for (String m : msgs) System.out.print(m + " "); System.out.println(); }
调用:log("INFO", "User logged in", "ID=123")


















