这个 15.12.2.5 选择最具体的方法 谈到了这一点,但它相当复杂。例如,在 Foo(数字...ints) 和 Foo(Integer...整数)
为了向后兼容,这些实际上是一回事。
public Foo(Object... args){} // syntactic sugar for Foo(Object[] args){}
// calls the varargs method.
Foo(new Object[]{new Object(), new Object()});
例如,您可以将 main() 定义为
public static void main(String... args) {
使它们与众不同的一种方法是在varargs之前取一个参数
public Foo(Object o, Object... os){}
public Foo(Object[] os) {}
Foo(new Object(), new Object()); // calls the first.
Foo(new Object[]{new Object(), new Object()}); // calls the second.
它们并不完全相同。微妙的区别在于,虽然您可以将数组传递给 varargs,但不能将数组参数视为 varargs。
public Foo(Object... os){}
public Bar(Object[] os) {}
Foo(new Object[]{new Object(), new Object()}); // compiles fine.
Bar(new Object(), new Object()); // Fails to compile.
此外,varags 必须是最后一个参数。
public Foo(Object... os, int i){} // fails to compile.
public Bar(Object[] os, int i) {} // compiles ok.