首頁 > Java > java教程 > 在 Java 中將字串宣告為「final」是否會改變「==」比較它們的方式?

在 Java 中將字串宣告為「final」是否會改變「==」比較它們的方式?

Susan Sarandon
發布: 2024-11-29 15:51:10
原創
228 人瀏覽過

Does Declaring Strings as `final` in Java Change How `==` Compares Them?

在Java 中宣告Final 時使用== 比較字串

在Java 中,== 運算子比較兩個物件的記憶體算子比較兩個物件的記憶體引用。但是,當字串被宣告為 Final 並使用編譯時常數初始化時,會出現獨特的行為。

場景 1:非 Final 字串

考慮以下程式碼段:

String str1 = "str";
String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
登入後複製

此程式碼的結果將為 false。連線作業會建立一個新的 String 對象,它不等於預先存在的字串文字「string」。

場景2:最終字串

現在,讓我們將字串宣告為最終字串:

final String str1 = "str";
final String str2 = "ing";
String concat = str1 + str2;

System.out.println(concat == "string");
登入後複製

令人驚訝的是,結果現在是true。這是因為將字串宣告為 Final 允許編譯器內聯它們的值並將整個表達式視為編譯時常數表達式。

編譯器最佳化:實習

當編譯時常數表達式涉及字串時,Java 虛擬機(JVM) 會對其進行“實習”,這意味著它將字串的唯一實例儲存在稱為字串池的特殊位置。因此,第二個場景中的連接字串直接與中間字串「string」進行比較,得到真實的結果。

結論

將字串宣告為最終的編譯時常數導致最佳化器將表達式視為單一String 對象,從而允許對預先存在的字串文字進行語法相等性檢查(==)。這演示了 Java 中的編譯器最佳化以及它如何影響物件標識比較。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板