如果我编译并运行以下类(使用Java SE 7,如果这很重要),
class Foo {
public static void main(String[] args) {
System.out.println(true ? null : 42);
// System.out.println(null);
}
}
我得到以下输出
null
到目前为止,这么好。但是,如果我取消注释main
中的第二个语句,我会收到编译错误:
Foo.java:5: error: reference to println is ambiguous, both method println(char[]) in PrintStream and method println(String) in PrintStream match
System.out.println(null);
^
为什么Java编译器会抛出此错误
System.out.println
为null
,但如果参数为true ? null : 42
,则不会?{/ p>
答案 0 :(得分:8)
表达式true ? null : 42
的类型为Integer
,因此明确应该调用System.println(Object)
。
如果你致电System.println(null)
,有多种候选方法,而编制者无法决定采用哪种方法。