为什么接受无效的字符串参数



我创建了一个带有public static void main(String arg[]) OR的Java应用程序public static void main(String[] arg)

但是昨天我发现,如果我用public static void main(String... args)编译一个程序,这也完全正常工作。为什么?

这是因为String...将被转换为String[]

根据jls§8.4.1

变量性方法的调用可能包含比形式形参更多的实际实参表达式。所有与可变参数之前的形式参数不对应的实际参数表达式将被求值,结果将存储到一个数组中,该数组将传递给方法调用。

在Java中声明varargs是一个编译时错误:

String... abc={"abc","def"};

这是因为varargs可以作为方法签名中的最后一个参数,并且正如jls中所说,varargs将被求值,结果将存储在数组中,然后传递给方法

这是因为,

任何以Datatype ... var_name形式写的东西都是var参数

可以接受任意数量的该类型的实参。

在这一点上和Array是一样的

ex: String ... args等价于String[] args

这被称为可变长度参数,您可以发送任意数量的具有相同数据类型的参数。您可能会想到一个问题:"这些函数可以被重载吗?"答案是肯定的。

这个例子展示了VARGS是如何工作的

<>之前

公共类VarargsTest
{//计算平均数
公共静态双平均数(双…数字)
{double total = 0.0;//初始化total

//使用增强的for语句
for (double d: numbers)
total += d计算total;

返回total/numbers.length;
}//end method average
public static void main(String args[])
{
double d1 = 10.0;
font =宋体;
double d3 = 30.0;
Printf ("d1 = %。1fnd2 = %。1fnd3 = %。1fnd4 = %。1fnn", d1, d2, d3, d4);

System.out。d和d2的平均值为%。
average(d1, d2)};
system . out。d1, d2和d3的平均值为%。
average(d1, d2, d3));
system . out。d1, d2, d3和d4的平均值为%。1fn",
average(d1, d2, d3, d1);
}//end main
}//end class VarargsTest

相关内容

  • 没有找到相关文章

最新更新