2010-10-13 68 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以外的任何类型。

相关问题