通过传递 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)。
Object
、double[]
都可以取null为有效值。所以两者都合适。
Object
是 double[]
的超类型,因此比 Object
更具体。这就是当你将 null
传递给函数
时它打印 "Double array argument method." 的原因
其他问题:
正如评论中已经解释的那样,当您传递原始 int
的 0
时,将自动装箱到具有 Object
作为超类型的 Integer
中,因此它打印 "Object o argument method."
您可以在 Method Overloading for null argument
中找到更多信息
我在 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)。
Object
、double[]
都可以取null为有效值。所以两者都合适。
Object
是 double[]
的超类型,因此比 Object
更具体。这就是当你将 null
传递给函数
其他问题:
正如评论中已经解释的那样,当您传递原始 int
的 0
时,将自动装箱到具有 Object
作为超类型的 Integer
中,因此它打印 "Object o argument method."
您可以在 Method Overloading for null argument
中找到更多信息