当发送到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这篇文章和我对你的评论讨论了两个不同的链接。请阅读本文第一行的链接