可能重复:
方法重载为NULL参数
下面的代码编译,去罚款。
public class Main
{
public void temp(Object o)
{
System.out.println("The method with the receiving parameter of type Object has been invoked.");
}
public void temp(String s)
{
System.out.println("The method with the receiving parameter of type String has been invoked.");
}
public void temp(int i)
{
System.out.println("The method with the receiving parameter of type int has been invoked.");
}
public static void main(String[] args)
{
Main main=new Main();
main.temp(null);
}
}
在该代码中,将被调用的方法是接受类型的参数的一个String
该文档说。
如果不止一个成员方法既方便和适用于方法调用,就必须选择一个提供运行时方法调度描述符。 Java编程语言使用的是选择了最具体方法的规则。
但是,当在该接受原语的参数的代码的方法的一个我不理解int
被修改以接受包装类型的参数Integer
,诸如
public void temp(Integer i)
{
System.out.println("The method with the receiving parameter of type Integer has been invoked.");
}
发出一个编译时错误。
参考温度是不明确的,在methodoverloadingpkg.Main匹配两个方法温度(java.lang.String中)在methodoverloadingpkg.Main和方法临时(java.lang.Integer中)
在这种特定的情况,为什么合法超载与然而似乎不符合其相应的包装类型的情况下的基本数据类型的方法?