如果我编译并运行以下类(使用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);
^
如果的参数System.out.println
是null
,但如果参数是true ? null : 42
,则不是?
表达式true ? null : 42
的类型是Integer
,因此应该调用System.println(Object)
是明确的。
如果调用System.println(null)
,则有多个候选方法,编译器无法决定采用哪一个。