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

一个关于NULL 的貌似不难的问题
先上代码:

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


求各位大神解释一下。

------解决方案--------------------
首先null代表一个不确定的对象,其次可以说null本身不是一个对象从null instance of Object结果为false可以看出(null instanceof java.lang.String结果为false解决)
String的默认值为null,当重载方法时,按照子类的算,所以当给method传入null时,public static void method(String str)满足。
------解决方案--------------------
这是重载中准确性的原则,你可以认为null是String,也可以认为null是Object。但是从层次上看Object处在更上层,String是从Object继续过来的,调用print(String some)将更准确。