首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Java 方法重載為何選 String 而非 Object?null 的類型推斷規則

     編輯:C++ 入門

現象代碼


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 的特殊性

  • null 無類型,可賦值給任何引用類型
  • 編譯器不報錯,而是按上述規則選擇最具體簽名

歧義示例


static void magic(String s) {}
static void magic(Integer i) {}
magic(null);  // 編譯錯誤:String 和 Integer 無繼承關係,同樣具體,產生歧義

最佳實踐

  • 避免對同一方法名重載參數類型為父子關係的類
  • 若需區分 null,顯式轉型:magic((String)null)
  • 理解「最具體」規則有助於診斷重載解析錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved