为什么输出String传递的不是对象

时间:2014-05-09 11:14:59

标签: java string object

public class test {
public static void main(String[] args) {
    magic(null);
}

public static void magic(String s) {
    System.out.println("String passed");
}

public static void magic(Object o) {
    System.out.println("object passed");
}
}

为什么字符串传递打印而不是对象传递。

2 个答案:

答案 0 :(得分:4)

来自JLS

  

如果多个成员方法都可访问且适用于a   方法调用,有必要选择一个提供   运行时方法调度的描述符。 Java编程   language使用选择最具体方法的规则。

     

非正式的直觉是,如果第一种方法处理的任何调用都可以通过,那么一种方法比另一种方法更具体   没有编译时类型错误的另一个。

答案 1 :(得分:1)

如果不输入强制转换,则会根据最具体的选择进行选择。 null可以是String类型或Object类型的引用。 因此,如果两者都可用,那么将调用String方法。

public class test {
    public static void main(String[] args) {
        magic(null);
    }

    public static void magic(Object o) {
        System.out.println("object passed");
    }

    public static void magic(String s) {
        System.out.println("String passed");
    }

    public static void magic(Integer s) {
        System.out.println("Integer passed");
    }
}

这将不再编译,

它会说:模糊的方法调用。测试匹配中的magic(String)magic(Integer)

相关问题