我轉換的Groovy代碼庫到Java和忘記改變的Java 8的主要功能簽名可變參數
public static void main(String... args) {
到
public static void main(String args[]) {
並編譯這段時間跑項目只很驚訝只有現在這是合法的Java 8代碼。
據我所知,Java 8 Varargs使函數具有任意數量的參數,「根據它們在方法調用上的位置將它們壓縮成一個數組」。
但隨着String... args
和String[] args
方式函數調用語法上是不同的:
void function1 (String[] args) {}
function1({"one", "two", "three"});
void function2 (String... args) {}
function2("one", "two", "three");
因此,如何爲String... args
法律爲String args[]
從終端攫取PARAMS什麼時候?
編輯:
azurefrog鏈接的回答不同的問題是巨大的。我想提一提另一個答案在評論提供我一直在尋找的答案:
Why doesn't Java's main use a variable length argument list?
註釋1:有趣。根據其他答案/評論判斷,我猜這個新的主要聲明語法是在Java 1.5中添加的。因此,Java運行時根據主要方法聲明確定是將字符串直接傳遞給main還是先構建一個數組?
評論2:不,它總是建立一個數組。就被調用的方法而言,參數爲String... args == String[]
。在任何情況下,參數都是數組
這就是我的問題。對不起,如果它被問及不好。
基本上是因爲JLS這麼說的。看[這個答案](http://stackoverflow.com/a/2201895/1361506)。 – azurefrog
varargs在Java中自1.5起有效,我想。可能的重複http://stackoverflow.com/questions/301563/difference-fnstring-args-vs-fnstring-args – Wizard
@嚮導不是重複的。我並不是問一個語法與其他語言相比有什麼好處。當我使用任何語法時,我都會詢問使用相同結果運行Java代碼的底層實現。 – sargas