在Java中,变长参数是否被视为数组?
据我所知,在Java中,变长参数是否被视为数组?,java,arrays,variadic-functions,Java,Arrays,Variadic Functions,据我所知,数组由固定数量的元素组成,可变长度参数接受的参数数量与您传递的参数数量相同(类型相同)。但它们是一样的吗?我能在需要另一个的地方经过吗 是,如果您有一个带有varargs参数的方法,如下所示: public void foo(String... names) foo("x", "y", "z"); 你这样称呼它: public void foo(String... names) foo("x", "y", "z"); 然后编译器将其转换为: foo(new String[] {
数组
由固定数量的元素组成,可变长度参数
接受的参数数量与您传递的参数数量相同(类型相同)。但它们是一样的吗?我能在需要另一个的地方经过吗 是,如果您有一个带有varargs参数的方法,如下所示:
public void foo(String... names)
foo("x", "y", "z");
你这样称呼它:
public void foo(String... names)
foo("x", "y", "z");
然后编译器将其转换为:
foo(new String[] { "x", "y", "z"});
names
参数的类型是String[]
,可以像任何其他数组变量一样使用。请注意,它仍然可以是null
:
String[] nullNames = null;
foo(nullNames);
有关更多信息,请参阅
这并不意味着varargs可以与数组互换——您仍然需要声明接受varargs的方法。例如,如果您的方法声明为:
public void foo(String[] names)
那么,调用它的第一种方法将无法编译。一个简单的测试将表明它们是相同的:
public class test {
public static void varArgs(String... strings) {
for (String s : strings) {
System.out.println(s);
}
}
public static void main(String[] args) {
String[] strings = {"string1", "string2", "string3"};
varArgs(strings);
varArgs("string4", "string5", "string6");
}
}
产出:
string1
string2
string3
string4
string5
string6
它们是相同的,JVM在创建varargs方法时在内部使用数组。因此,您可以用处理数组的相同方式处理vararg参数,因此请使用实例增强for循环
public void method(String... args) {
for(String name : args) {
//do something
}
}
然后像这样调用它,甚至传递一个数组
method("a", "b", "c");
method(new String[] {"a", "b", "c"});
请参阅此nice以获得进一步解释。您试过了吗?编写几行Java代码并不需要太多。答案是:是的,您还可以将数组传递给变量参数方法,并将其用作参数列表。但是,不能将变量参数传递给声明为接受数组的方法。@ErwinBolwidt您的注释非常有用。谢谢。正如ErwinBolwidt提到的,我们不能在需要数组的地方传递可变数量的参数。但是,主要的方法呢?我们可以将main声明为main(String…args),对吗?你能澄清一下吗?@Phoenix:是的,你可以-当然,你可以很容易地自己测试。但是Java数组的大小必须是预设的。这会将允许的参数数量限制为该数组的大小。在我看来,变量参数列表必须是ArrayList