Java:重载方法,方法(null)会发生什么?

时间:2012-12-18 20:48:56

标签: java

  

可能重复:
  Java method dispatch with null argument

为什么打印“a(String)”?

public class Test{
    public static void main(String[] args){
        a(null);
    }
    public static void a(Object x){
        System.out.println("a(Object)");
    }
    public static void a(String x){
        System.out.println("a(String)");
    }
    public static void a(int x){
        System.out.println("a(int)");
    }
    public static void a(){
        System.out.println("a()");
    }
}

Java版:

java version "1.7.0_04-ea"
Java(TM) SE Runtime Environment (build 1.7.0_04-ea-b228)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b12, mixed mode)

2 个答案:

答案 0 :(得分:2)

因为规则是选择最具体的方法而String继承自Object。

From the specification :

  

如果在其中一个方法中确定了几种适用的方法   适用性测试的三个阶段,然后是最具体的一个阶段   选择

答案 1 :(得分:1)

如果重载方法编译器使用最具体的参数调用该方法。由于java.lang.Stringjava.lang.Object编译器调用更强特定类,所以使用字符串作为参数的方法。

来自Java language Specification:

  

如果在其中一个方法中确定了几种适用的方法   适用性测试的三个阶段,然后是最具体的一个阶段   选择