在 Java 中連接空字串
在 Java 中,連接空字串可能看起來違反直覺,導致 NullPointerException。但是,此操作成功執行,結果是一個包含“null”的字串,後跟連接的字串。
為什麼會這樣?
根據 Java 語言規範(JLS) 8,§ 15.18.1,在字串連接期間,空引用明確轉換為字串「null」。此轉換發生在任何方法呼叫之前,請確保不會拋出 NullPointerException。
它是如何運作的?
Java 編譯器將串聯表達式轉換為等效的序列方法呼叫。在 s = s "hello" 的情況下,編譯器產生類似以下的程式碼:
s = new StringBuilder(String.valueOf(s)).append("hello").toString();
StringBuilder 的append 方法可以優雅地處理空參數。如果第一個參數為 null,則呼叫 String.valueOf() 將其轉換為字串。
或者,表達式s = "hello" s 將轉換為:
s = new StringBuilder("hello").append(s).toString();
在這種情況下,append 方法將null 作為第二個參數,並將其委託給String.valueOf()。
注意:
Java 編譯器可能會最佳化字串連線使用 StringBuilder 池等技術以不同的方式提高效能。因此,產生的確切等效程式碼可能會根據所使用的編譯器而有所不同。
以上是為什麼在 Java 中連接空字串不會拋出 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!