通过传递0和null的Null参数的方法重载

时间:2018-12-18 11:42:08

标签: java oop polymorphism overloading

我在Stack Overflow上看到了有关为null参数重载方法的问题,但并没有解决我的困惑,因此我尝试了一些其他未解决的问题,这就是为什么要问这个问题。

我想知道为什么当我传递“ null”时它执行参数类型为double的函数,而当我传递“ 0”或任何其他数字(如1,2,10等)到函数时它执行其参数的函数类型是“对象”。我知道NULL有差异,而0 here是差异。

谢谢!

代码:

public class NullArgumentOverloading {

    public static void main(String[] args) {

        NullArgumentOverloading obj = new NullArgumentOverloading();
        obj.overLoad(null); // prints "Double array argument method."
        obj.overLoad(0); // prints "Object o argument method."
    }

    private void overLoad(Object o) {
        System.out.println("Object o argument method.");
    }

    private void overLoad(double[] dArray) {
        System.out.println("Double array argument method.");
    }
}

1 个答案:

答案 0 :(得分:4)

Java将始终尝试使用可用方法的最特定版本(请参见JLS 15.12.2)。

Objectdouble[]都可以将null作为有效值。因此,两者都是合适的。

Objectdouble[]的超类型,因此比Object更具体。因此,这就是它显示“双数组参数方法”的原因。当您将null传递给函数

关于其他问题: 正如评论中已经解释的那样,当您传递0(它是原始int)时,将自动装箱到Integer作为超类型的Object中,因此它打印“对象或参数方法。”

您可以在Method Overloading for null argument

中找到更多信息。