繁体   English   中英

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

[英]Why does `System.out.println(null);` give “The method println(char[]) is ambiguous for the type PrintStream error”?

我正在使用代码:

System.out.println(null);

它显示错误:

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

为什么null不表示Object

PrintStream中有3个println方法接受引用类型 - 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);

如果调用System.println(null)则有多个候选方法(使用char []StringObject参数),编译器无法决定采用哪一个。

固定
将显式强制转换添加到null。

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

或者使用null对象模式


为什么null不代表Object?

JLS 4.1类型和价值的种类

还有一个特殊的null类型,表达式的类型为null,没有名称。
由于null类型没有名称,因此无法声明null类型的变量或转换为null类型。
空引用是null类型表达式的唯一可能值。 null引用始终可以强制转换为任何引用类型。
始终可以将null引用分配或强制转换为任何引用类型

在实践中,程序员可以忽略null类型,只是假装null只是一个特殊的文字,可以是任何引用类型

因此null的类型不是 Object ,尽管它可以转换为(读取 - 分配给) Object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM