当我将go方法中的字符串数组参数从String ... y更改为String y []时,我在下面的代码中收到错误。有人可以解释一下原因吗?
public class scjp2 {
public static void main(String[] args) {
new scjp2().go( 1,"hi");
new scjp2().go( 2,"hi", "world");
}
public void go( int x,String...y) {
System.out.print(y[y.length - 1] + " ");
}
}
也有人可以解释为什么我需要将String ... y参数作为方法
中的最后一个参数示例:
public void go( int x,String...y) // correct way
public void go( String...y,int x) // wrong way
答案 0 :(得分:3)
将String...y
更改为String y[]
时收到错误,因为在new scjp2().go( 2,"hi", "world");
中您没有传递数组。 new scjp2().go( 2,new String[]{"hi", "world"});
可以使用两种方法签名。
至于为什么Varargs参数必须是最后一个 - 它是一个可选参数,并且由于Java中传递的值到方法参数的映射是按顺序完成的,因此您将无法调用{{1如果new scjp2().go(1);
是第一个参数,因为1不是String... y
。另一方面,当可选的Varargs参数是方法签名的最后一个参数时,String
完全正常。