【发布时间】:2012-10-19 10:46:51
【问题描述】:
可能重复:
Overloaded method selection based on the parameter’s real type
How is an overloaded method choosen when a parameter is the literal null value?
当我执行下面的代码时,我得到以下输出:
调用字符串参数的方法..."
为什么?
public class StringObjectPOC {
public static void test(Object o) {
System.out.println("Method with Object argument Called ...");
}
public static void test(String str){
System.out.println("Method with String argument Called ...");
}
public static void main(String[] args) {
StringObjectPOC.test(null);
}
}
【问题讨论】:
-
所以你有一个重载的方法'test'并且你用一个字符串调用它,但是你想知道为什么对象没有被调用?
-
这只是因为
String类是Object类的一种特殊形式(因为String类除了具有Object类的所有特性之外own) 由 JLS 指定的编译器选择(选择最具体的方法,在您的情况下,接受String类型的参数的方法)。 -
理论上空引用不是任何类型,那么为什么JVM选择String而不是Object。我认为因为 Object 是 Java 中每个类的基础,所以它应该调用带有 Object 参数的方法。
-
@Alpesh Gediya - 这是因为在您的情况下,
null可以同时解析为String和Object。不是吗? (Object和String都可以是null)因此,编译器会按照 Java 语言规范 (JSL) 中的规定选择最具体的方法,在您的情况下,最具体的方法是接受String参数。
标签: java