2013-10-05 49 views
2

案例1:可變長度參數可以代替單維數組嗎?

Class Test{ 
    public static void m1(int[] x){ 
     /* some code here */ 
    } 
} 

案例2:

Class Test{ 
    public static void m1(int... x){ 
     /* some code here */ 
    } 
} 

現在告訴我,如果情況下2適用與否?如果是這樣,請從編譯器的角度解釋我。另一個問題:單個維數組可以替代單變長參數嗎?

+3

你是什麼意思:「情況2是否適用?」。 – Rohan

回答

0

如果2編譯器爲您寫入數組代碼。您可以閱讀this文章,瞭解添加可變長度參數時會發生什麼的描述。可變參數,當您需要傳遞一個或多個參數一個參數的

用法是氣餒除非有真正的需求,因爲這種方法很容易出錯和醜陋。

0

而是創建一個數組,然後傳遞,作爲一個參數的函數,你可以使用varargs的。雖然,如果您想要將多個陣列傳遞給您的參數並單獨操縱它們,那麼您可能不應該使用varargs

作爲一個回答你的問題,這兩種情況下適用。在您的功能中,arrayvarargs都將被視爲相同。這真的取決於你選擇哪一個最適合你的情況。

0

從一個編譯器點:

  • 情形1:x長度是在運行時是已知的。 x在堆上某處,並且x的引用被放入堆棧,當調用m1時。
  • case2:x的長度在編譯時已知,因爲源代碼明確列出了所有的int參數。當調用m1時,每個int都放在堆棧上。

這事實上是另一種情況。您可以撥打m1與導致堆棧處理在案例1案例2m1(new int[] {3,4,5});