【发布时间】:2012-11-29 21:38:23
【问题描述】:
所以我可以将空值传递给 java 中的函数。我也可以在java中重载函数。但是考虑以下
public static void main(String ... args){
doStuff(null);
}
public static void doStuff(String s){
solveWorldHunger();
}
public static void doStuff(Integer i){
nukeCanada();
}
public static void nukeCanada(){
System.out.println("NO!");
}
public static void solveWorldHunger(){
System.out.println("YAY!");
}
无论源代码的顺序如何,前面的程序总是会打印出 YAY...
谁能解释一下为什么 jvm 始终决定运行 solveWorldHunger 函数而不是 nukeCanada 函数?
【问题讨论】:
-
好吧,以
int开头的@ 不能为空...Integer的示例可能更有趣。 -
因为Java是一种仁慈的编程语言。
-
如果使用不同的复杂类型重载方法,则必须将 null 强制转换为这些类型之一。
-
现在您编辑的代码将无法编译。方法调用中的歧义。
标签: java methods reference null overloading