2015-12-16 46 views
0

當我將String ... y中的go方法更改爲字符串數組參數時,我在下面的代碼中收到錯誤。有人可以解釋爲什麼嗎?使用java的字符串數組參數錯誤

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] + " "); 
    } 
} 

也可以有人解釋爲什麼我需要有串... Y參數作爲方法的最後一個參數

例如:

 public void go(int x,String...y) // correct way 

    public void go(String...y,int x) // wrong way 
+2

因爲這就是它的設計。例如:如果你有(String ... y,String x),編譯器如何知道哪一個仍然是y的一部分,哪一個是x? – Stultuske

回答

3

你得到一個錯誤,當您將String...y更改爲String y[],因爲您在new scjp2().go(2,"hi", "world");中未傳遞數組。 new scjp2().go(2,new String[]{"hi", "world"});可以同時使用兩種方法簽名。

至於爲什麼Varargs參數必須是最後一個參數 - 它是一個可選參數,並且由於在Java中傳遞的值映射到方法參數是按照順序完成的,所以如果if不能調用new scjp2().go(1); if String... y是第一個參數,因爲1不是String。另一方面,當可選的Varargs參數是方法簽名的最後一個參數時,new scjp2().go(1);工作得很好。

+0

這個答案是正確的,不知道爲什麼這是downvoted ... – JonK