日期:2014-05-20  浏览次数:20622 次

java 求解释
public class Test {
public void test(String str){
System.out.println("string");
}
public void test(Object o){
System.out.println("object");
}
public static void main(String[] args) {
Test test=new Test();
test.test(null);
}
}


判断一下会输出什么? 如果你知道为什么是这个结果,求解释,呵呵。。。。。。。。

------解决方案--------------------
string,null是string类型的
------解决方案--------------------
string。
string类型属于object类型,string类型更准确。
null是string类型,在java中会优先执行更符合传入参数类型的那个方法,所以会执行这个方法:test(String str)。
如果没有public void test(String str)这个方法,程序也可以执行,此时返回值为 object。
------解决方案--------------------
个人理解:
null不应该说是某个类型的。
你可以Object o=null;也可以String s=null;还可以Integer i=null;
所有的引用类型都可以赋值为null。
编译器在匹配null到底调用哪个test的时候,如果子类类型能匹配上,就不在匹配父类,子类匹配不上才去匹配父类。(或者说总是匹配最精确的那一个)
所以如果你还有个方法:
public void test(Integer i){
System.out.println("Integer");
}
再去写test.test(null);就会报错,因为编译器不知道这个null跟谁匹配
------解决方案--------------------
引用:
string,null是string类型的