[Java] 11.3. 參數的自動包裝&自動拆裝

將值帶入參數時,Java也可以自動包裝與自動拆裝。

 

image/svg+xml11.3. 參數 & ⾃動包裝 / ⾃動拆裝 Parameter&Autoboxing/ AutoUnboxing class Person{ int age; void setAge ( double newAge){ age = ( int )newAge; System.out.println( " 選⽤ setAge(double newAge)" ); } void setAge ( Integer newAge){ age = newAge; System.out.println( " 選⽤ setAge(Integer newAge)" ); } } class Main{ public static void main( String [] args){ int age = 18 ; Person p = new Person (); p.setAge ( age ); } } 執⾏結果 選⽤ setAge(double newAge)    class Person{ int age; void setAge ( double newAge){ age = ( int )newAge; System.out.println( " 選⽤ setAge(double newAge)" ); } void setAge ( Integer newAge){ age = newAge; System.out.println( " 選⽤ setAge(Integer newAge)" ); } } class Main{ public static void main( String [] args){ Integer age = 18 ; Person p = new Person (); p.setAge ( age ); } } 執⾏結果 選⽤ setAge(Integer newAge)    J11_3_1 – Person.java 3. 這帶入 Integer 型別的年齡設值式( setAge() )。 J11_3_1 – Main.java 編譯器選擇 多載⽅法的過程 轉型 byte short int long f oat double ⾃動包裝 外覆類別 1. 先看這裡。 4. age int 型別的變數,其中放著 18 的整數值。 2. 這帶入 double 型別的年齡設值式( setAge() )。 6. 編譯器若要選取 Integer 型別版本的年齡設值式 setAge() ),則這必須在基本資料無法轉型成其他的基本 資料型別的情況下,才會選則以⾃動包裝⽅式代入參數中。 5. int 型別的資料代入⾄多載的年齡設值式 setAge() )中,這時編譯器發現並沒有⼀個為 int 型別 的參數,因此選⽤更⼤空間的 double 型別參數進⾏帶入。 J11_3_2 – Person.java J11_3_1 – Main.java 2. 這帶入 Integer 型別的年齡設值式( setAge() )。 1. 這帶入 double 型別的年齡設值式( setAge() )。 3. age int 型別的變數,其中放著 18 的整數值。 4. Integer 型別的資料代入參數中,編譯器只會選⽤為 Integer 型別的參數代入。 原因很簡單,因為它是⼀個物件,物件只能尋找對應的型別的參數才可以代入。 選⽤多載的條件,轉型優於外覆類別 1 1 1 選⽤多載的條件,外覆物件僅對應外覆型別 1 1 1

留言