java中可变参数(varargs)用“类型...”声明且必须为方法最后一个参数,一个方法仅能有一个;调用时可传零个、多个值或数组;方法内按普通数组处理,非null但可能为空;与重载共存时优先匹配最具体签名。

Java 中用 可变参数(Varargs) 接收不定数量的同类型参数,只需在形参类型后加 ...(三个英文点),编译器会自动将其转为对应类型的数组。
语法格式和基本用法
可变参数必须是方法的**最后一个参数**,且一个方法最多只能有一个 varargs 参数。
- 正确写法:
public void printNumbers(int... nums) - 错误写法:
public void printNumbers(int... nums, String s)(varargs 不在末尾) - 错误写法:
public void printNumbers(int... a, String... b)(多个 varargs)
调用时的灵活传参方式
调用含 varargs 的方法时,可以传零个、一个、多个同类型值,也可以直接传一个对应类型的数组(需显式强制转换或拆解)。
- 传零个:
printNumbers();→nums是长度为 0 的int[] - 传多个字面量:
printNumbers(1, 2, 3);→nums = {1, 2, 3} - 传已有的数组:
int[] arr = {4, 5}; printNumbers(arr);(直接传数组也合法)
方法体内如何处理 varargs
在方法内部,varargs 形参就是一个普通数组,可遍历、取长度、用增强 for 循环等。
public static void sum(int... numbers) {
int total = 0;
for (int n : numbers) {
total += n;
}
System.out.println("总和:" + total);
}
注意:不要在方法里对 varargs 数组做 null 判断以外的空检查——即使没传参数,它也是非 null 的空数组。
与重载方法共存时的注意事项
如果存在同名但参数不同的重载方法(比如一个带 int...,另一个带 int[]),调用时优先匹配**最具体的签名**。
-
method(1)→ 匹配method(int...)(比method(int[])更具体) -
method(new int[]{1, 2})→ 明确匹配method(int[]) - 避免同时定义
method(int...)和method(int[]),容易引发歧义
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











