2010-10-13 67 views
9

爲什麼輸出:「內部字符串參數方法」?不是「對象」類型?null是否有Object類型?

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     a.printVal(null); 
    } 
} 
+1

哇!我只是嘗試添加第三個'printVal'重載,'printVal(Integer obj)'來查看會發生什麼。現在'a.printVal(null)'是一個編譯器錯誤,由於含糊不清。好問題。 – mgiuca 2011-02-06 01:55:43

回答

3

是的,但空也是字符串類型和所有其他類型,所以選擇最具體的方法來調用。

1

更具體地說,null文字將調用字符串版本,由於其他答案概述的原因。

在另一方面:

class A { 
    void printVal(String obj) { 
     System.out.println("inside String argument method"); 
    } 

    void printVal(Object obj) { 
     System.out.println("inside Object argument method"); 
    } 

    public static void main(String[] args) { 
     A a = new A(); 
     Object myObj = null; 
     a.printVal(myObj); 
    } 
} 

將打印 「Object參數方法裏面。」如將myObj的類型設置爲除String以外的任何類型。

相關問題