Java 关于 null 的面试题

public class Test{

    public void myMethod(Object obj){
        System.out.println("My Object");
    }
    
    public void myMethod(String str){
        System.out.println("My String");
    }
    public static void main(String args[]){
        Test t = new Test();
        t.myMethod(null);
    }
}

A.输出 : My Object

B.输出: My String

C.执行中断

D.Runtime

答案: 
B : My String


为什么呢?

分析: 

该类中有两个相同名称的方法名,大家应该都记得”重载“这个概念吧。“方法重载”有两种形式:1.返回类型不一致; 2.传入参数不一致。此题为第二种形式。

再者 null 是什么呢? null 表示一个不确定的对象,值与类型等等都未知。

将 null 传入本题中方法时,由于参数的继承关系(Object、String都是对象,String为Object子类),会将不确定对象 null 当做其子类型处理,即String

再者 :将题中的Object参数改为 Character 时,由于 Character 和 String 之间并没有继承关系。所以main 无法确定 不确定对象null 到底为哪个方法的参数,结果为: 编译不通过
 

猜你喜欢

转载自blog.csdn.net/qq_38959715/article/details/84038297