我在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.");
}
}
答案 0 :(得分:4)
Java将始终尝试使用可用方法的最特定版本(请参见JLS 15.12.2)。
Object
,double[]
都可以将null作为有效值。因此,两者都是合适的。
Object
是double[]
的超类型,因此比Object
更具体。因此,这就是它显示“双数组参数方法”的原因。当您将null
传递给函数
关于其他问题:
正如评论中已经解释的那样,当您传递0
(它是原始int
)时,将自动装箱到Integer
作为超类型的Object
中,因此它打印“对象或参数方法。”