【发布时间】:2015-04-12 23:18:31
【问题描述】:
null 是一个引用,它只是null 类型,即null 不是对象类型。
但是,当我运行以下代码 sn-p 时,当我将 null 传递给方法 method(null); 时,我很惊讶它调用 method(String s) 而不是 method(Object o)。
如果null本身是Java定义的类型而不是对象类型,那为什么它调用method(String s)而不是method(Object o)?
public class Test {
public static void main(String[] args) {
method(null);
}
public static void method(Object o) {
System.out.println("Object impl");
}
public static void method(String s) {
System.out.println("String impl");
}
}
编辑
我又添加了一种方法:
public static void method(Integer s) {
System.out.println("String impl11");
}
现在编译器给出错误The method method(Object) is ambiguous for the type Test。
Integer a = null;
如果合法,那为什么我会看到编译时异常?
【问题讨论】:
-
@ThomasStets 我不认为这是重复的问题
-
@Priya 是的。阅读这个问题,它问的问题完全相同,只是方法参数的类型不同。
-
基本上是同一个问题:重载的方法,用空参数调用,为什么调用这个而不是那个。而答案也是一样的。