当我将 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
最佳答案
更改 String...y
时出现错误至String y[]
因为在 new scjp2().go( 2,"hi", "world");
你没有传递一个数组。 new scjp2().go( 2,new String[]{"hi", "world"});
可以使用这两种方法签名。
至于为什么 Varargs 参数必须是最后一个 - 它是一个可选参数,并且由于 Java 中传递值到方法参数的映射是按照顺序完成的,因此您将无法调用 new scjp2().go(1);
如果String... y
是第一个参数,因为 1 不是 String
。另一方面,new scjp2().go(1);
当可选的 Varargs 参数是方法签名的最后一个参数时,工作得非常好。
关于java - 使用java的字符串数组参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34309273/