※呼叫 Overloading
public static void main(String[] args) {
xxx(1);
xxx(new Integer(1));
xxx("String");
}
public static void xxx(Integer x){
System.out.println("Integer");
}
public static void xxx(int x){
System.out.println("int");
}
public static void xxx(Object x){
System.out.println("Object");
}
※1.
※基本型態要注意隱性轉換的問題
以short 為例:
順序如下:
short --> int --> long --> float --> double --> Short --> Number --> Object
又以 Short 為例
順序如下:
Short --> Number --> Object --> short --> int --> long --> float --> double
所以結果為 基本型態 --> Wrapper類別 --> Number --> Object 或
Wrapper類別 --> Number --> Object --> 基本型態
數字和浮點數都有繼承 Number,所以 Wrapper 類別沒有對應到會調用 Number,但 char 和 boolean 沒有繼承 Number,所以 Wrapper類別沒有對應到會調用 Object
※2.以上加上 char 和 Character 也有隱性轉換的問題 (int 並不會轉成char;但 char 會轉成 int)
順序如下:
char --> int --> --> long --> float --> double --> Character --> Object --> 都沒有就編譯錯誤 (和 Integer 沒關係)
Character --> Object --> char --> int --> --> long --> float --> double 都沒有就編譯錯誤 (和 Integer 沒關係)
※3.boolean 是 boolean --> Boolean --> Object,不會轉換成數字
※4.可以強制調用,如 int 可以用 (int) new Integer(1)
※5.如果給 null,必需剛好只有一個可接收 null 參數的方法,否則會編譯錯誤(ambiguous)
但 Object 參數的方法是個例外,都找不到合適的參數時,會呼叫
所以最多可以有兩個 overloading,Object 和 Wrapper
如果想直接呼叫 Object 參數的方法,可用「(Object) null」,別懷疑,可以強轉的,這時不管有幾個 overloading 都可以了
當然想要 (Integer) null 也是可以的
※使用建構子也有相同的情況
以上總結:
基本類型最終會找到 Object 為止;Wrapper 經過 Object 後,會回到基本類型
基本類型:基本型態(注意隱式轉換) --> Wrapper 類別 --> Object
Wrapper 類型:Wrapper類別-->Object-->基本型態(注意隱式轉換)
※第一個有可能會回傳負數,所以不建議使用
※可用第三個取代第二個,速度會更快,因為二進制比較快
※第一個回傳a,但第二個和第三個居然回傳97,也就是 char 強轉成 int 了,可在 int 加上 final 關鍵字,這樣就不會有強轉的問題了
※使用三元運算子,回傳時最好型態都相同
※快速判斷奇偶數
public static boolean isEven(int num){
// return num % 2 != 1;
// return num % 2 == 0;
return (num & 1) == 0;
}
※第一個有可能會回傳負數,所以不建議使用
※可用第三個取代第二個,速度會更快,因為二進制比較快
※三元運算子問題
char x = 'a'; int i = 0; // 97;final--> a System.out.println(true ? x : 0); // a System.out.println(true ? x : i); // 97 System.out.println(false ? i : x); // 97 System.out.println(false ? 0 : x); //a
※第一個回傳a,但第二個和第三個居然回傳97,也就是 char 強轉成 int 了,可在 int 加上 final 關鍵字,這樣就不會有強轉的問題了
※使用三元運算子,回傳時最好型態都相同
沒有留言:
張貼留言