有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么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) 个答案

  1. # 1 楼答案

    原因是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.