gpt4 book ai didi

java - 为什么Java更喜欢调用双构造函数?

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:17 26 4
gpt4 key购买 nike

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 可以是任何东西,所以上面的代码编译得很好。当我运行代码时,我希望它打印 in object 但它打印 in double这背后的原因是什么?

注意链接的问题可能不重复,因为这个问题与原始数据类型和对象有关

最佳答案

原因是 Java 将 null 解释为任何类型,并且在选择要调用的方法时,它会选择首先是参数类型的最具体的方法。因为 null 可以是 double[] 类型,而 double[] 是一个 Object,编译器将选择采用double[] 的方法。如果选择涉及同样可能但不相关的类型,例如double[]String,那么编译器将无法选择方法,这将导致模棱两可的方法调用错误。

JLS, Section 4.1 , 状态:

The null reference can always be assigned or cast to any reference type (§5.2, §5.3, §5.5).

In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.

关于java - 为什么Java更喜欢调用双构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com