在 Java 中,可变长度参数是否被视为数组?

2022-09-03 04:04:41

据我所知,a由固定数量的元素组成,并且a需要与您传递的参数数量一样多(相同类型)。但它们是一样的吗?我能通过一个预期的地方吗?arrayvariable length argument


答案 1

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

public void foo(String... names)

你这样称呼它:

foo("x", "y", "z");

然后编译器只是将其转换为:

foo(new String[] { "x", "y", "z"});

参数的类型是 ,可以像任何其他数组变量一样使用。请注意,它可能仍然是namesString[]null

String[] nullNames = null;
foo(nullNames);

有关详细信息,请参阅 varargs 的文档

这并不意味着 varargs 可以与数组互换 - 你仍然需要声明该方法来接受 varargs。例如,如果您的方法声明为:

public void foo(String[] names)

那么调用它的第一种方法将无法编译。


答案 2

它们是相同的,数组在创建 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"});

请参阅这篇不错的文章以获取进一步的解释。