当发送到Java中的构造函数时,什么是;空";你有什么价值?

当发送到Java中的构造函数时,什么是;空";你有什么价值?,java,constructor,null,Java,Constructor,Null,可能重复: 我最近在几天前编写代码时遇到了这种好奇,似乎不明白为什么会发生以下情况: 考虑到下面的班级 public class RandomObject{ public RandomObject(Object o){ System.out.println(1); } public RandomObject(String[] s){ System.out.println(2); } } 调用新随机对象时(null)生成时,无论

可能重复:

我最近在几天前编写代码时遇到了这种好奇,似乎不明白为什么会发生以下情况:

考虑到下面的班级

public class RandomObject{
    public RandomObject(Object o){
        System.out.println(1);
    }
    public RandomObject(String[] s){ 
        System.out.println(2);
    }
}
调用
新随机对象时(null)生成时,无论构造函数的创建顺序如何,输出总是
2
。为什么
null
指的是字符串数组而不是对象?

如果有两种情况可供选择,编译器将首先尝试选择更具体的情况。在这种情况下,字符串将在对象上拾取

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


因此,由于
String[]
是一种比其超级类型
对象更为具体的数据类型,因此选择了它。

这里的关键是该对象是String[]的超级类型


Java使用最具体的可用方法来解决此类情况。Null可以传递给这两个方法而不会产生编译错误,因此Java必须在这里找到最具体的方法。带有字符串[]的版本更为具体,因此将选择它来执行。

@guido另一个问题涉及两个非
对象
s此处带有
对象
的情况是不同的一个。此处与此处不同,不是字符串[]而不是字符串,但对象而不是AnObject@guido这篇文章和我对你的评论讨论了两个不同的链接。请阅读本文第一行的链接