動態參數 String... args,可以傳遞0~N個參數;
數組參數 String[] args,需要實例化或者指定為null ;(方法內部需要對null進行判定)
//利用動態參數進行參數傳遞
public static void sayHello(String... args) { for (String s : args) { System.out.println("hi," + s); } }
//利用數組進行參數傳遞 public static void sayArrayHello(String[] args) { for (String s : args) { System.out.println("hi," + s); } }
編譯後的代碼如下:
public static void sayHello(String... args) { String[] arr$ = args; int len$ = args.length; for(int i$ = 0; i$ < len$; ++i$) { String s = arr$[i$]; System.out.println(s); } } public static void sayArrayHello(String[] args) { String[] arr$ = args; int len$ = args.length; for(int i$ = 0; i$ < len$; ++i$) { String s = arr$[i$]; System.out.println(s); } }
個人認為兩者此時,編譯後的代碼是相同的。
那麼,他們兩個又有哪些區別呢?
區別一、動態參數可以有任意多個,而且是可以作為缺省;而數組參數,需要實例化或者指定為null ;(方法內部需要對null進行判定);
public static void sayHello(Boolean sayProfix, String... args) { for (String s : args) { System.out.println(sayProfix + s); } } public static void sayArrayHello(Boolean sayProfix, String[] args) { for (String s : args) { System.out.println(sayProfix + s); } }
調用方:
sayHello(true, "a", "b", "c", "d"); sayHello(false);//依然可以正常執行 System.out.println("end string... args"); sayArrayHello(true, new String[]{"_a", "_b", "_c", "_d"}); sayArrayHello(false, new String[]{});//必須聲明一個數組 System.out.println("enf of string[] args");
其實,更多的還是在於調用方的區別。動態參數(String...) 類似於C#中的參數設置了默認值,在傳遞時,如果不傳遞,將默認使用指定的默認值;
public static void Csharp(bool sayProfix,string content="",int flag=1 ) { //todo }
that's all.