7 42 謹慎的使用變長引數

2021-09-01 19:15:44 字數 893 閱讀 3637

jdk5支援方法使用變長引數,如下:

public void sayhello(string...names)
arrays.aslist(t...a)使用了變長引數,以下**將列印出不同的結果:

int values=new int;

system.out.println(arrays.aslist(values));//列印[[i@4eedf3f6]

system.out.println(arrays.aslist(1,2,3));//列印[1, 2, 3]

system.out.println(arrays.tostring(values));//列印[1, 2, 3]

arrays.aslist(values)把傳入的values視為1個int型別的引數,而arrays.aslist(1,2,3)視為傳入3個引數值,因此前者列印結果為陣列。如果需要列印陣列內容,建議使用arrays.tostring()。建議不要像arrays.aslist(t...a)一樣使用變長引數,除非真的有必要這樣做,否則可能導致不能再編譯時檢查引數型別。

每次呼叫變長引數的方法,jvm會建立乙個陣列用於存放傳入的變長引數值。這可能會影響效能。如果確定大多數情況只需要傳入0-3個引數值,那麼可以提供多個固定引數的方法,以提高效能,如下:

public void foo() 

public void foo(int a1)

public void foo(int a1, int a2)

public void foo(int a1, int a2, int a3)

public void foo(int a1, int a2, int a3, int... rest)

7 42 謹慎的使用變長引數

jdk5支援方法使用變長引數,如下 public void sayhello string.names arrays.aslist t.a 使用了變長引數,以下 將列印出不同的結果 int values new int system.out.println arrays.aslist values ...

Java可變長引數的使用

1.可變長引數在定義的時候只能放在方法的最後乙個引數位置,乙個方法只允許乙個可變長引數 2.可變長引數本質就是陣列,因此如下方式的定義是錯誤的 public class thinking public void test string p 3.呼叫的時候會優先選擇固定長度引數的方法,如下面 的輸出就...

使用巨集的變長引數打LOG

單步除錯總有無法勝任的時候,通常我們會打log.如 ifdef debug define mylog str else define mylog 0 endif vs2005的編譯器和gcc都支援巨集的變長引數.vs2005的語法如下 ifdef debug define perror else d...