参见英文答案 >
Which overload will get selected for null in Java?3
以下代码打印“String”
以下代码打印“String”
public class Riddle { public static void main(String[] args) { hello(null); } public static void hello(Object o) { System.out.println("Object"); } public static void hello(String s) { System.out.println("String"); } }
为什么代码编译?不是空虚吗?
例如,以下代码不会因为模糊签名而编译.
public class Riddle { public static void main(String[] args) { hello(null); } public static void hello(Object o) { System.out.println("Object"); } public static void hello(Integer o) { System.out.println("Integer"); } public static void hello(String s) { System.out.println("String"); } }
有人可以解释为什么第一个例子可以编译没有歧义的错误?
解决方法
在第二种情况下,编译器无法在使用Integer的方法和使用String的方法之间进行编译,而在第一种情况下,编译器可以计算出来.
参考:http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2