为什么null可以传递给重载的Java方法?

时间:2015-08-11 06:43:01

标签: java overloading

我从this site找到了这个Java代码。我不明白它如何编译而没有模棱两可的错误。

 package swain.test;

 public class Test {
     public static void JavaTest(Object obj) {
         System.out.println("Object");
     }

     public static void JavaTest(String arg) {
         System.out.println("String");
     }

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

输出:

String

1 个答案:

答案 0 :(得分:6)

null可以传递给JavaTest(String arg)JavaTest(Object obj),因此编译器会选择具有更具体参数类型的方法。由于StringObject更具体(StringObject的子类),因此选择了JavaTest(String arg)

如果您JavaTest(Object obj)代替JavaTest(Integer obj),则编辑将失败,因为Integer并不比StringString is not more specific than整数更具体,所以编译器无法做出选择。