Java中的可变参数

64 阅读2分钟

Java中的可变参数 (varargs)

可变参数是Java 5引入的一个特性,允许方法接收不定数量的参数。使用可变参数可以简化方法的重载,使代码更加简洁。

1. 基本语法

public void method(Type... args) {
    // args在方法内部被当作数组使用
}

2. 使用规则

  1. 一个方法只能有一个可变参数
  2. 可变参数必须是方法的最后一个参数
  3. 可以传入零个或多个参数
  4. 可变参数在方法内部被当作数组处理

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. 常见应用场景

  1. 格式化字符串:String.format(String format, Object... args)
  2. 集合工具类:Arrays.asList(T... items)
  3. 日志记录:logger.debug(String format, Object... args)
  4. 自定义工具方法,需要处理不定数量参数的场景

5. 注意事项

  1. 避免在性能关键的代码中过度使用
  2. 注意空参数的处理
  3. 不要滥用可变参数,当参数数量确定时使用普通参数
  4. 可变参数会创建数组对象,有轻微的性能开销

值传递,对象引用传递 for (double num : numbers) : Java的增强for循环(也称为foreach循环)

Java循环类型

  1. 标准for循环:for(int i=0; i<array.length; i++)
  2. 增强for循环(类似TypeScript中的for...of):for(String item: stringArray)
  3. forEach(Java 8+中的Lambda表达式):list.forEach(item -> {})
  4. while和do-while循环
  5. Stream API(Java 8+):list.stream().filter(item => item.length() > 3).forEach(System.out::print)
  6. Map遍历,for(Map.Entry<String, Integer> entry: map.entries()){ String key = entry.getKey(); // 获取键 Integer value = entry.getValue(); // 获取值 }