public class Test {
public static void main(String[] args) {
magic(null);
}
static void magic(String s) { System.out.println("String"); }
static void magic(Object o) { System.out.println("Object"); }
}
// 輸出:String
Java 語言規範(JLS 15.12.2.5)規定:重載解析時,若多個方法適用,選擇最具體(most specific)的那個。String 是 Object 的子類,故更具體,被選中。
null 無類型,可賦值給任何引用類型
static void magic(String s) {}
static void magic(Integer i) {}
magic(null); // 編譯錯誤:String 和 Integer 無繼承關係,同樣具體,產生歧義
magic((String)null)