在java中的方法参数中传递空引用?

时间:2014-05-19 12:30:52

标签: java string

当我运行此代码时,输​​出为“String”;如果我隐藏接受String参数的方法并再次运行代码然后输出是“对象”,那么有人可以解释一下这段代码是如何工作的吗?

public class Example {

    static void method(Object obj) {
        System.out.println("Object");
    }

    static void method(String str) {
        System.out.println("String");
    }  

    public static void main(String args[]) {
        method(null);
    }
}

1 个答案:

答案 0 :(得分:8)

编译器将选择最具体的方法,在这种情况下,String是Object的子类,因此将调用String作为参数的方法。

来自JLS 15.12.2.5

  

如果多个成员方法都可访问且适用于a   方法调用,有必要选择一个提供   运行时方法调度的描述符。 Java编程   language使用选择最具体方法的规则。

     

非正式的直觉是一种方法更具体   如果可以传递第一个方法处理的任何调用,则为另一个   没有编译时类型错误的另一个。