首頁 > Java > java教程 > Java 中「final」關鍵字如何影響字串比較?

Java 中「final」關鍵字如何影響字串比較?

Patricia Arquette
發布: 2024-11-29 03:55:14
原創
869 人瀏覽過

How Does the `final` Keyword Affect String Comparisons in Java?

Java 中的字串比較和終結性

在Java 中,字串起著至關重要的作用,它們的行為會受到Final 關鍵字的影響。考慮以下程式碼片段:

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

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

此程式碼連接兩個字串,然後使用相等運算子 == 將其與文字字串進行比較。如預期,結果為 false。

但是,當字串變數宣告為 Final 時,結果會改變:

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

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

在這種情況下,比較表達式現在會傳回 true。這種行為上的變化提出了最終如何影響字串比較的問題。

最終性和實習的相互作用

在Java 中,當使用編譯創建字符串時,時間常數表達式(例如,文字字符串)並且字符串變數被標記為final,它就成為常數變數。這些常數變數由編譯器內聯,這意味著它們的值在使用它們的地方被替換。

在我們的第二個程式碼範例中,串聯操作實際上變成:

String concat = "str" + "ing"; // Inlined from final variables
登入後複製

結果in:

String concat = "string";
登入後複製

字串string 是實習的,這意味著它儲存在唯一字串實例的池中。相同的 interned 實例可用於具有相同內容的任何其他字串文字。

當我們將 concat 與「string」進行比較時,我們實際上是在比較對同一 interned 實例的兩個引用。因此,結果為 true。

非最終情況

在第一個程式碼範例中,由於字串變數不是最終的,因此它們不是編譯時的常數表達式。連線操作在執行時發生,這會建立一個新的 String 物件。該物件沒有被 interned,因此它的引用與“string”的 interned 引用不同,導致比較錯誤。

結論

在 Java 中,宣告 string將變數設為 Final 並使用編譯時常數表達式初始化它們可能會影響字串比較。當字串被保留時,就像使用最終變數一樣,基於對唯一保留實例的共享參考進行比較,從而導致可能不同的結果。

以上是Java 中「final」關鍵字如何影響字串比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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