JAVA不定引數探祕(轉)

langgufu314發表於2012-04-18

JAVA中可以使用不定引數,

例如 public void test(String ...args){...} 這裡test方法可以傳入引數的情況是:

1.不使用引數,如test()

2.使用一個或多個引數,如test("1"); test("1","2");

3.使用陣列 test(new String[]{"1","2"});

在test方法內部,我們可以像使用陣列的訪問方式一樣來訪問引數args.如:args[i] 這樣就有一個好處,在引數輸入不定的情況下,使用這個方法非常簡單。非常易於使用。

有幾點需要注意的就是

我們見到的是不定引數,其實編譯器編譯之後它會將這個test(String ...args){...} 編譯成為陣列呼叫的方式test(String[] args){} ,這個過程是編譯中就完成了的,我們程式編寫過程中看不到這個實際的轉換過程。 而我們呼叫這個test方法時,編譯器同樣會把引數轉換成new String[]{""}的形式呼叫,所以,本質上來講,就是一個以陣列為引數的呼叫方法,我們看不到而已,具體詳細情況可以反編譯class類就可以明瞭。

如果同時同一個類中還有一個test方法,例如test(),或者test(String args) ,我們採用 test("1")的方式呼叫,我們就可以知道了,因為有這個方法存在,所以編譯器就會優先使用這個 test(String args) 方法,而不會使用不定引數的方法,這個原因很明確,因為不定引數本質上是一個陣列為引數的方式。所以,如果你定義了一個不定引數的test方法,如果你再定義一個test(String[] args)的以陣列為引數的方法,編譯器就會提示你方法定義重複。道理就在這裡。

相關文章