2013-08-25 56 views
3

所以我一直試圖弄清楚Java中的String...這一點。據我所知,它與String []大致相同,但在這裏或Google上我找不到任何有關它的信息。「String ...」的正確用法是什麼

有人可以告訴我它是什麼以及這樣的東西的正確用法? (可以說我有帶參數的方法myMethod(String... args) { ... }

謝謝!

+1

尋找「variadic java」。 –

回答

7

就語言類型而言,此語法確實與String[]完全相同。然而,它允許呼叫者通過指定可變數量的參數String隱式構造的數組:

myMethod("a", "b", "c"); 
myMethod(); // Empty array is also allowed 
myMethod("a", "b"); 

一個限制對這個語法,象這樣的參數可以在該方法的參數列表的末尾纔會出現。

+0

這是否意味着它可以轉換爲String []對象? –

+0

@ IAreKyleW00t。它被轉換爲'String []'。 –

+2

@ IAreKyleW00t絕對:這是一個編譯時的特性,在運行時該類與'myMethod(String [])'類相同,調用將與'myMethod(new String [] {「a」 「b」,「c」})'。 – dasblinkenlight

2

這意味着myMethod接受零個或多個String參數。見here,例如,在Java Language Specification,這就是所謂的可變參數數量參數:

方法或構造的最後形式參數是特殊的:它可以是可變參數元數,由以下類型的省略號指示

如果最後一個形式參數是變量arity參數,則該方法是一個變量arity方法。否則,它是一種固定的方法。

JLS還在gruesome detail中描述了在存在可變參數時如何匹配方法簽名。

2

...表示該方法支持變量即變量(數量)自變量。

所以,你可以打電話給你的myMethod()作爲

myMethod(); // or 
myMethod(str1); // or 
myMethod(str1, str2); // and so on 

使用相同的方法簽名myMethod(String... str)。當聲明一個具有多個參數的變量方法var-arg參數必須在所有其他常規方法參數之後成功。

在該方法內部,所有傳遞的參數都可以以與參數名稱相同的參考名稱作爲數組訪問。所以,你可以在這裏實際使用str.length

該功能非常靈活。你甚至可以通過一個String[]它。但是,相反是不正確的。採用數組的方法不會接受單個字符串。

相關問題