定義一個函數時,如果我們不確定無法確定參數的個數,那么就需要使用到可變參數,可變參數就是可以接收數量不確定的多個參數值。
在JDK 1.5之前都是通過數組來解決參數不確定問題。
其實可變參數本質上就是一個數組,可以通過數組的下標來反問可變參數的元素。
1、將可變參數賦值給數組類型對象
由於可變參數也是數組,因此,可以直接將可變參數對象賦值給數組類型對象。

2、可變參數值的遍歷:
由於可變參數就是一個數組,只是寫法與數組不一樣。當需要訪問可變參數值時,可以像訪問一個數組一樣訪問,以及可以使用數組對象提供的方法。

3、可變參數的傳值:
調用函數時,如果給可變參數傳值?有兩種方式
1、直接將各個參數傳給該函數,寫法如下:
test
("我" ,"是" ,"中" ,"國" ,"人")
這樣test函數就收到了
"我"
,
"是"
,
"中"
,
"國"
,
"人"這個5個參數值
它
等價於調用一個包含5個形參的函數,test(String a, String b, String c, String d ,Stirng e)

2、通過數組來傳值給可變參數
(1)當數組的數據類型跟可變參數的數據類型一致或者數組的
數據類型可以轉換成可變參數的數據類型(即數組的數據類型是可變參數的數據類型的子類),並且只有一個參數傳遞且數組為一維數組時,
此時,可變參數自動將數組拆分成多個參數

(2)除此以上情況之外,所有的傳入參數將作為可變參數這個“數組”的元素

結果解析:
第一個調用test(b ,b) ,雖然數據類型為String,可以轉換給Object類型,但是由於此時傳遞給可變參數的參數個數不為1,所以不自動拆分成多個參數處理,而是將每個傳入參數作為可變參數這個“數組”的元素,即此時Object ... objects 相當於 Object [] objects = new Object[]{ b ,b} ,所以打印出來的長度給2,即有兩個元素。
第二個調用test(c) ,由於int類型不能轉換成功Object對象類型,因此也不會自動拆分。此時
Object ... objects 相當於 Object [] objects = new Object[]{ c }
第三個調用test(d) ,由於是二維數組,無法自動拆分。
此時
Object ... objects 相當於 Object [] objects = new Object[]{ d }