请教java null的一个问题,感觉很有趣,帮忙解决下,谢谢~

来源:百度知道 编辑:UC知道 时间:2024/09/24 14:09:48
public class TestArray{
public void show(Object o){
System.out.println("Object");
}
public void show(double[] arr){
System.out.println("double array");
}
public static void main(String[] args){
TestArray ts=new TestArray();
ts.show(null);

}
}在这个小程序中,当把void show(double[] arr)这个方法注释时,能够输出Object,但是不注释输出double array,是不是有个调用优先级的问题,帮忙解决下,谢谢!

这是因为java中除了基本数据类型,比如int,double外都是对象.~

数组也不例外.因此double[] arr是一个对象.不信你用arr后面加点也会出现Object的一些基本方法.

double[]是Object的子类,因此会优先调用第二个show方法.当第二个show方法不存在的时候,自然会调用第一个show 方法.

你也可以用其他的方法来测试.
如加入ts.show(new int[10]);因为int[]不能转化为double[]类型,也并非其子类,因此会调用第一个show函数,因为它是Object的子类.~

下面是另一个测试:

public class TestArray {
public void show(Object o) {
System.out.println("Object");
}

public void show(double[] arr) {
System.out.println("double array");
}

public void show(List<?> list) {
System.out.println("List");
}

public static void main(String[] args) {
TestArray ts = new TestArray();
ts.show(new int[10]);
ts.show(new ArrayList<String>());
}
}
运行结果是:
Object
List

呵呵 你这个属于方法重载。
通俗点说,就是因为你传入的参数是null,它就自动去进行就近匹配,因为数组对象是最接近的,于是就打印doublearray,否则就接着去找到Object,然后打印Object.