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

Method Overloading for Null Argument by passing 0 and null

我在 Stack Overflow 上看到了关于空参数的方法重载的问题,但没有解决我的困惑,我尝试了一些不同的方法,但答案中没有讨论这就是为什么问这个问题。

我想知道当我传递 "null" 时它执行参数类型为双精度的函数以及当我将“0”或任何其他数字如 1、2、10 等传递给它执行的函数时的原因参数类型为 "Object" 的函数。我知道 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.");
    }
}

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

Objectdouble[]都可以取null为有效值。所以两者都合适。

Objectdouble[] 的超类型,因此比 Object 更具体。这就是当你将 null 传递给函数

时它打印 "Double array argument method." 的原因

其他问题: 正如评论中已经解释的那样,当您传递原始 int0 时,将自动装箱到具有 Object 作为超类型的 Integer 中,因此它打印 "Object o argument method."

您可以在 Method Overloading for null argument

中找到更多信息