首頁 >Java >java教程 >在 Java 中將字串宣告為「final」會影響「==」比較嗎?

在 Java 中將字串宣告為「final」會影響「==」比較嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-03 06:12:10601瀏覽

Does Declaring Strings as `final` in Java Affect `==` Comparisons?

在Java 中比較宣告為Final 的== 字串

在Java 中使用相等運算子(==) 比較字串時,結果根據字串是否聲明為最終字串而有所不同。

Final字串

當字串被宣告為final時,編譯器透過將值內聯為編譯時常數表達式來最佳化它。這意味著字串值在編譯時確定並直接儲存在字節碼中,而不是在運行時動態分配。

Final Strings 的行為

中如果字串宣告為Final,則比較表達式concat == "string" 傳回true,因為:

  • 編譯器取代與內聯字串的串連運算: String concat = "str" "ing"; // 變成String concat = "string";
  • 字串文字被保留,這表示對相同字串值的多個引用共享相同實例。因此,concat 和文字「字串」引用同一個 String 對象,從而產生真正的相等。

非最終字串

相反,非-final 字串不是內聯的,而是在運行時動態分配的。連接操作會建立一個新的 String 對象,它與記憶體中的文字「字串」不同。因此,比較表達式 concat == "string" 傳回 false。

驗證

要確認此行為,可以比較非最終和最終的字節碼字串版本:

非最終版版本:

最終版本:

因此,將字串宣告為Final 並使用編譯時常數表達式初始化它們會影響由於字串文字的內聯和駐留,使用 == 進行相等比較的結果。

以上是在 Java 中將字串宣告為「final」會影響「==」比較嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn