簡體   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