为什么 'System.out.println(null);' 给出 “println(char[]) 方法对于 PrintStream 错误类型不明确”?
2022-09-01 23:04:56
我正在使用代码:
System.out.println(null);
它显示错误:
The method println(char[]) is ambiguous for the type PrintStream
为什么不代表?nullObject
我正在使用代码:
System.out.println(null);
它显示错误:
The method println(char[]) is ambiguous for the type PrintStream
为什么不代表?nullObject
有 3 种方法接受引用类型 - 、 、 。printlnPrintStreamprintln(char x[])println(String x)println(Object x)
当您通过时,所有3个都适用。方法重载规则更喜欢具有最具体参数类型的方法,因此未选择。nullprintln(Object x)
然后编译器不能在前两个 - & - 之间进行选择,因为它不是比更具体,反之亦然。println(char x[])println(String x)Stringchar[]
如果要选择特定方法,请将 null 强制转换为所需的类型。
例如:
System.out.println((String)null);
如果调用,则有多个候选方法(带有 、 和 参数),编译器无法决定采用哪一个。System.println(null)char []StringObject
修复
将显式强制转换为 null。
System.out.println((Object)null);
或者使用空对象模式。
为什么
null不代表 Object?
还有一个特殊的 null 类型,即表达式 null 的类型,它没有名称。
由于 null 类型没有名称,因此无法声明 null 类型的变量或强制转换为 null 类型。
空引用是 null 类型的表达式的唯一可能值。空引用始终可以强制转换为任何引用类型。
null 引用始终可以赋值或强制转换为任何引用类型
在实践中,程序员可以忽略 null 类型,而只是假装 null 只是一个特殊的文本,可以是任何引用类型
因此,的类型不是 ,尽管它可以转换为 (读作分配给) 一个 。nullObjectObject