數組與可變參數


定義一個函數時,如果我們不確定無法確定參數的個數,那么就需要使用到可變參數,可變參數就是可以接收數量不確定的多個參數值。

在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 }  
 
 
                     
 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM