null
是一个引用,仅属于null
类型,即null
不是对象类型。
但是,当我运行以下代码片段并将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
。该错误与Test类型的method方法存在二义性有关。Integer a = null;
如果这是合法的,为什么我会看到编译时异常?