为什么Java更喜欢调用双构造函数?
public class test {
test(double[] a)
{
System.out.println("in double");
}
test(Object a)
{
System.out.println("in object");
}
public static void main(String args[])
{
new test(null);
}
}
在上面的代码中,我将null
作为构造函数参数传递。因为null
可以是任何东西,所以上面的代码编译得很好。当我运行代码时,我希望它在object中打印,但它在double中打印
这背后的原因是什么
注意链接的问题可能不会重复,因为该问题与原始数据类型vs对象相关
# 1 楼答案
原因是Java将
null
解释为任何类型,在选择要调用的方法时,它将选择最具体的方法,首先调用参数类型。因为null
可以是double[]
类型,而double[]
是Object
,编译器将选择采用double[]
的方法。如果选择涉及同样可能但不相关的类型,例如double[]
和String
,那么编译器将无法选择方法,这将导致方法调用错误不明确该JLS, Section 4.1声明: