Java中可变参数(varargs)语法为类型...参数名,本质是编译器自动转为数组;必须位于参数列表末尾且仅能有一个;方法内按对应类型数组使用;调用支持零个、多个值或显式解包数组;需注意重载歧义和泛型擦除导致的unchecked警告。

Java 中用 可变参数(varargs) 处理方法中长度不固定的参数,语法是 类型... 参数名,本质是编译器自动将参数转为对应类型的数组。
基本写法和注意事项
可变参数必须放在参数列表的最后,且一个方法只能有一个 varargs 参数:
- ✅ 正确:
void print(String prefix, int... numbers) - ❌ 错误:
void print(int... numbers, String suffix)(位置不对) - ❌ 错误:
void print(int... a, String... b)(多个 varargs 不允许)
在方法内部如何使用
声明为 int... nums 后,方法体内直接当 int[] nums 使用:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 可用
nums.length获取个数 - 支持普通 for 循环、增强 for 循环、Stream 操作等
- 例如:
for (int n : nums) { System.out.println(n); }
调用时的灵活写法
调用方可以传零个、一个或多个对应类型的值,也可显式传数组(需加 ... 解包):
立即学习“Java免费学习笔记(深入)”;
-
sum();→nums是空数组(length == 0) -
sum(5);→nums = {5} -
sum(1, 2, 3, 4);→nums = {1,2,3,4} -
int[] arr = {10, 20}; sum(arr);→ 编译错误;应写成sum(arr...)
与重载和泛型配合的小提醒
varargs 方法可能和重载方法产生歧义,编译器优先匹配精确签名;泛型 + varargs 会触发“unchecked”警告,因为泛型擦除后无法确保类型安全:
- 避免写
void foo(Object... args)和void foo(String s)同时存在,容易调用意外 - 泛型示例:
<t> void addAll(T... elements)</t>→ 调用时若传入原始类型数组,需注意类型推断结果

















