先上代码:public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
method(null);
System.out.println(null instanceof java.lang.String);
} public static void method(Object o){
System.out.println("My Object...");
}

public static void method(String str){
System.out.println("My String...");
}
}
输出:
My String...
false
求各位大神解释一下。

解决方案 »

  1.   

    为什么调用的是方法method(String str)而不是method(Object o)?
      

  2.   

    首先null代表一个不确定的对象,其次可以说null本身不是一个对象从null instance of Object结果为false可以看出(null instanceof java.lang.String结果为false解决)
    String的默认值为null,当重载方法时,按照子类的算,所以当给method传入null时,public static void method(String str)满足。
      

  3.   

    可以肯定的是null不是一个对象,至于为什么使用参数String重载的方法,目前还没有找到原因
      

  4.   

    这是重载中准确性的原则,你可以认为null是String,也可以认为null是Object。但是从层次上看Object处在更上层,String是从Object继续过来的,调用print(String some)将更准确。