当用Java发送给构造函数时,"null"值有什么作用?

Eri*_*yen 12 java null constructor

可能重复:
传递null时选择了哪个构造函数?

我最近在几天前的编码时遇到了这种好奇心,似乎无法弄清楚为什么会发生以下情况:

鉴于下面的课程

public class RandomObject{
    public RandomObject(Object o){
        System.out.println(1);
    }
    public RandomObject(String[] s){ 
        System.out.println(2);
    }
}
Run Code Online (Sandbox Code Playgroud)

进行调用时new RandomObject(null);,输出始终2与构造函数的创建顺序无关.为什么要null引用字符串数组而不是对象?

And*_*nov 14

这里的关键是Object是String []的超类型

Java使用最具体的可用方法来解决此类情况.Null可以传递给两个方法而不会出现编译错误,因此Java必须在此处找到最具体的方法.String []的版本更具体 - 因此将选择执行它.


Kar*_*k T 6

其他人之前有过这个问题,请查看此帖

如果有两种情况可供选择,编译器将首先尝试选择更具体的情况.在这种情况下,String将被选中Object.

在另一个问题中,它String str不是String[] s

因此,由于它String[]是一种比其超类型更具体的数据类型Object,因此它被选中.