变量长度参数是否被视为Java中的数组?

据我所知, array由固定数量的元素组成,并且variable length argument在传递时使用相同数量的参数(相同类型)。 但他们是一样的吗? 我可以通过另一个预期的地方吗?

是的,如果你有一个带有varargs参数的方法,如下所示:

 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可以与数组互换 – 您仍然需要声明接受varargs的方法。 例如,如果您的方法声明为:

 public void foo(String[] names) 

那么调用它的第一种方法就是不能编译。

它们是相同的,在创建varargs方法时,JVM在内部使用该数组。 所以你可以像处理数组一样处理vararg参数,所以使用例如增强的for循环

 public void method(String... args) { for(String name : args) { //do something } } 

并像这样调用它甚至传递一个数组

 method("a", "b", "c"); method(new String[] {"a", "b", "c"}); 

有关详细说明,请参阅此文章 。

一个简单的测试表明它们是相同的:

 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