在 Java 中,可变长度参数是否被视为数组?
2022-09-03 04:04:41
据我所知,a由固定数量的元素组成,并且a需要与您传递的参数数量一样多(相同类型)。但它们是一样的吗?我能通过一个预期的地方吗?array
variable length argument
据我所知,a由固定数量的元素组成,并且a需要与您传递的参数数量一样多(相同类型)。但它们是一样的吗?我能通过一个预期的地方吗?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"});
请参阅这篇不错的文章以获取进一步的解释。