Java方法中的可变参数...(int... values)(Object... values)

Java中可以提供参数数量可变的方法

即变参(varargs)方法

比如:经典的printf方法。例如:

System.out.printf("%d", n);
System.out.printf("%d,%s",n,"abcd");

上面两条语句调用同一个方法,但一个调用有两个参数,一个有三个参数。

或许我们可以讲printf重载,但是如果我们需要给printf传递,更多参数呢,十个,十五个?

printf方法是这样定义的:

public class PrintStream{
    public PrintStream printf(String fmt, Object... args){
        return format(fmt, args);
    }
}

这里的省略号(...)是Java代码的一部分,表示这个方法可以接收任意个该类型的 数据。

实际上,printf接受两个参数,一个是格式化字符串,一个是Object[]数组,

其实,Object数组存放着其他所有传递的参数。(若是基本数据类型,就会自动的装箱)

这就是Java中可变参数的特性,它可以让我们为方法定义一个可变长度的参数。以避免需要同时重载 传递1-10个参数的方法,甚至更多。

当我们将参数定义为可变的,在调用方法时,会将传递的多个同类型的参数存入一个数组中,也就是说,我们也可以直接将一个数组传给方法

例如:

System.out.printf("%d %s", new Object[] {new Integer(1),abc});

下面是一个自定义的有可变参数的方法,计算若干个数中最大值:

public static double max(double... values){
    double largest = Double.NEGATIVE_INFINITY;
    for (double e: values){
        if(v > largest){
            largest = v;
        }
    }
    return largest;
}

调用上述方法:

double m = max{1, 2.4, 3.4};
// 编译器会将new double[]{1, 2.4, 3.4}传给max方法

你可能感兴趣的:(Java,java,开发语言,jvm)