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