您的位置:首页 > 其它

一个关于传入参数为null的问题

2016-12-16 11:46 489 查看
面试遇到的:代码如下:

public class Test {
public static void main(String[] args){
new Test().new A().get(null);

}

class A{
public void get(Object o){
System.out.println("objct:" + o);
}

public void get(Integer str){
System.out.println("Integer:" + str);
}
}
}


问运行结果是什么?

答案:

Integer:null

延伸:假如把

public void get(Object o){

System.out.println("objct:" + o);

}
传参改成Double类型,则结果又是什么?

分析:

该题目涉及点较多,比如内部类的实例化,不作为重点;类A中有两个方法名一样的方法声明,复习一下,假如同一类中有两个或以上方法名一样的方法声明是如何区分的呢?(第一种:返回类型不一致;第二种:传入参数不一致,本题为第二种)。

当null作为参数传入时编译器选择哪一个方法调用呢?首先null表示不确定的对象,即不知道类型和值是什么,一切未知。所以:

当把传参类型改成Double,则main中无法确定到底调用哪一个方法(因为null表示不确定对象,so不知道它是Integer or Double喽),编译不通过;

当两个方法中传入的参数为继承关系时(Interger extends Object)则将不确定对象null当作子类型处理。到这里才是重点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: