2015-06-20 144 views
6

Java中的String... argsString[] args和有什麼區別?Java中的String ... args和String []參數有什麼區別嗎?

我是Java編程新手。 任何人都可以告訴我有什麼區別(String....args)&(String [] args)如果我將使用第一個代替第二個........它有什麼區別?

String... args將聲明一個方法,期望可變數量的String參數。參數的數量可以是任何東西:包括零。

String[] args和等效String args[]將聲明一個方法,該方法只需要一個參數:一個字符串數組。

可能不會從這些觀察中發現的一個區別是,在第二種情況下(但不是第一種)調用者可能會引用該數組。在這兩種情況下,該方法都以args作爲字符串數組的方式工作,但是如果它執行諸如交換數組元素之類的操作,則使用String... args表單時,調用方不會看到這些元素。

+1

這是一個很好的問題,但它看起來像之前已被問過很多次。請參閱http://stackoverflow.com/questions/301563/difference-fnstring-args-vs-fnstring-args – hungryghost

回答

7

沒有區別。並且允許使用String... args

JLS-12.1.4. Invoke Test.main說(部分)

的方法主要必須聲明publicstatic,和void。它必須指定一個形式參數(§8.4.1),其聲明類型是String的數組。因此,以下任一聲明的是可以接受的:

public static void main(String[] args) 


public static void main(String... args) 

沒有明確列出的(但也允許)

public static void main(String args[]) 
+0

我只是想拋出最後的形式,雖然技術上允許和有效的'String []'形式是通常更可取,因爲括號表示實際的參數類型是'String []',而參數名稱是對'String []'類型的對象的引用。更多的會議偏好我猜... –

1

方法存在非常少的不同的是,他們都將以同樣的方式工作。

字符串...被稱爲varargs。可變參數的好處是它是非常好的語法糖,它可以讓你無限期地爲方法調用定義參數。在該方法的身體可變參數被精確地視爲一個類型的數組。

可變參數值的缺點是Java會將不定參數轉換爲新數組,從而產生垃圾。作爲替代方案,如果垃圾創建必須爲零,則可以使用方法重載來模擬可變參數。

14

如果您有void x(String...args)方法,則可以將其稱爲x("1", "2", "3"),而void x(String[] args)只能稱爲x(new String[] {"1", "2", "3"})

+0

這是最好的答案。它清楚地顯示了語法/用法的差異。 – hungryghost

+0

@hungryghost OP問及具體關於'main'(甚至標記了問題[tag:main])。 –

+0

@ElliottFrisch,這個問題本身並沒有提到'main',但我確實看到它被標記爲這樣。 'String ... args'和'String [] args'確實是一個普通的Java問題,但是如果OP特別想知道main,你的回答就很好解決了。我也會鼓勵你的(即使整個問題都是一個開始)。 ;) – hungryghost

相關問題