据我所知,array
由固定数量的元素组成,variable length argument
接收的数量与传递的数量相同(相同类型)。但他们一样吗?我可以通过一个预期的另一个吗?
答案 0 :(得分:22)
是的,如果你有一个带有这样的varargs参数的方法:
public void foo(String... names)
你这样称呼它:
foo("x", "y", "z");
然后编译器将其转换为:
foo(new String[] { "x", "y", "z"});
names
参数的类型为String[]
,可以像任何其他数组变量一样使用。请注意, 仍然是null
:
String[] nullNames = null;
foo(nullNames);
有关详细信息,请参阅documentation for varargs。
不意味着varargs可以与数组互换 - 您仍然需要声明接受varargs的方法。例如,如果您的方法声明为:
public void foo(String[] names)
然后调用它的第一种方法就不会编译。
答案 1 :(得分:7)
它们是相同的,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"});
有关详细说明,请参阅此article。
答案 2 :(得分:5)
一个简单的测试表明它们是相同的:
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