为什么`System.out.println(null);`give“方法println(char [])对于类型PrintStream错误是不明确的”?

时间:2016-03-31 05:58:29

标签: java null system println system.out

我正在使用代码:

System.out.println(null);

显示错误:

The method println(char[]) is ambiguous for the type PrintStream

为什么null不代表Object

2 个答案:

答案 0 :(得分:25)

println中有3个PrintStream方法接受引用类型 - println(char x[])println(String x)println(Object x)

当您通过null时,所有3个都适用。方法重载规则更喜欢具有最特定参数类型的方法,因此不选择println(Object x)

然后编译器无法在前两个选项中进行选择 - println(char x[])& println(String x) - 因为String并不比char[]更具体,反之亦然。

如果要选择特定方法,请将null转换为所需类型。

例如:

System.out.println((String)null);

答案 1 :(得分:7)

如果你调用System.println(null),有多个候选方法(char []StringObject参数),编译器无法决定采用哪种方法。< / p>

修复
将显式转换添加到null。

System.out.println((Object)null);

或使用null object pattern

  

为什么null代表对象?

来自JLS 4.1 The Kinds of Types and Values

  

还有一个特殊的null类型,表达式的类型为null,   没有名字。
因为null类型没有名字,所以不可能   声明null类型的变量或转换为null类型   空引用是null表达式的唯一可能值   类型。空引用始终可以转换为任何引用类型。
空引用始终可以分配或转换为任何引用类型

In   实践中,程序员可以忽略null类型而只是假装   null只是一个特殊的文字,可以是任何参考   输入

所以null的类型不是 Object,但可以将其转换为(读作分配给)Object

相关问题