日期:2014-05-19  浏览次数:20814 次

下面是一个java小练习,大家看看为什么是这种输出结果。
public class TESTS{
public void myMothod(String[] args){
System.out.println("string");
}
public void myMothod(Object obj){
System.out.println("object");
}
public static void main (String[] args){
TESTS T = new TESTS();
T.myMothod(null);
}
}
--------------------------------------
输出结果是:
string

为什么没有调用myMothod(Object obj)这个方法呢?

------解决方案--------------------
认为 null是数组 ,因为数组变量的默认也是 null
null的是一个特殊的标识符 ,

如果随便 new一个对象(非字符串数组) ,那么调用的都是 myMothod(Object obj)这个方法

null 或者 strArr = new String[] ; //应该都是 myMothod(String[] args)这个方法
------解决方案--------------------
null值的问题,第一个方法接收null为一个空数组了,传其他值就不会出现这个问题
------解决方案--------------------
在java解惑这本书看过类似的问题,“java的重载解析过程是以两个阶段运行的,第一阶段选取所有可用的方法或构造器;第二阶段是在第一阶段选取的方法或者构造器里面选取最精确的一个。如果一个方法或者构造器可以接受传递给另一个方法或构造器的任何参数,那么我们就说第一个方法比第二个方法缺乏准确性。”
------解决方案--------------------
因为Object比String[]更泛,也就是String[]比Object更精确......