Java中的可变参数 (varargs)
可变参数是Java 5引入的一个特性,允许方法接收不定数量的参数。使用可变参数可以简化方法的重载,使代码更加简洁。
1. 基本语法
public void method(Type... args) {
// args在方法内部被当作数组使用
}
2. 使用规则
- 一个方法只能有一个可变参数
- 可变参数必须是方法的最后一个参数
- 可以传入零个或多个参数
- 可变参数在方法内部被当作数组处理
3. 示例代码
// 计算多个数字的和
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
// 带有其他参数的可变参数方法
public static void printInfo(String prefix, int... numbers) {
System.out.print(prefix + ": ");
for (int num : numbers) {
System.out.print(num + " ");
}
}
// 使用示例
sum(1, 2, 3); // 返回 6
sum(1, 2, 3, 4, 5); // 返回 15
sum(); // 返回 0
printInfo("Numbers", 1, 2, 3); // 输出 "Numbers: 1 2 3"
4. 常见应用场景
- 格式化字符串:
String.format(String format, Object... args) - 集合工具类:
Arrays.asList(T... items) - 日志记录:
logger.debug(String format, Object... args) - 自定义工具方法,需要处理不定数量参数的场景
5. 注意事项
- 避免在性能关键的代码中过度使用
- 注意空参数的处理
- 不要滥用可变参数,当参数数量确定时使用普通参数
- 可变参数会创建数组对象,有轻微的性能开销
值传递,对象引用传递 for (double num : numbers) : Java的增强for循环(也称为foreach循环)
Java循环类型
- 标准for循环:for(int i=0; i<array.length; i++)
- 增强for循环(类似TypeScript中的for...of):for(String item: stringArray)
- forEach(Java 8+中的Lambda表达式):list.forEach(item -> {})
- while和do-while循环
- Stream API(Java 8+):list.stream().filter(item => item.length() > 3).forEach(System.out::print)
- Map遍历,for(Map.Entry<String, Integer> entry: map.entries()){ String key = entry.getKey(); // 获取键 Integer value = entry.getValue(); // 获取值 }