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 池等技術以不同方式優化字串連接以提高效能。因此,產生的確切等效程式碼可能會因所使用的編譯器而異。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3