使用java的字符串数组参数错误

时间:2015-12-16 10:16:41

标签: java

当我将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

1 个答案:

答案 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完全正常。