首頁 >Java >java教程 >為什麼在 Java 中重新分配 String 變數不會改變原始字串的值?

為什麼在 Java 中重新分配 String 變數不會改變原始字串的值?

Patricia Arquette
Patricia Arquette原創
2024-12-19 11:55:14488瀏覽

Why does reassigning a String variable in Java not change the original string's value?

字串是不可變的:理解概念

在Java 中,字串是不可變的,這意味著它們的內容不能直接修改。然而,當我們觀察以下程式碼時,這個概念可能會令人困惑:

String a = "a";
System.out.println("a 1-->" + a);
a = "ty";
System.out.println("a 2-->" + a);

輸出:

a 1-->a  
a 2-->ty

實際發生了什麼?

儘管 a 分配新值,輸出顯示原始值。這種明顯的矛盾是由字串的不變性所引起的。當將新字串指派給引用變數時,將建立一個新字串對象,並且引用將更新為指向新對象。原始字串保持不變。

字串如何運作

為了更好地理解這一點,讓我們探索String 類別的功能:

    建立: String str = "knowledge" 建立一個值為「knowledge」的字串對象,並將引用str指派給
  • 指派引用:String s = str 建立一個指向同一個字串物件的新引用 s。
  • 修改嘗試:str = str.concat(" base") 概念上追加「base」到str,但由於字串是不可變的,因此會建立一個值為「knowledge base」的新字符串對象,並將引用str更新為指向

記憶體管理和字串常數池

字串文字在應用程式中很常見,並且會佔用大量記憶體。為了優化記憶體使用,Java 虛擬機器 (JVM) 維護一個「字串常數池」來儲存所有字串文字。當遇到字串文字時,編譯器會檢查池中是否存在現有匹配項。如果找到,引用將定向到現有字串,從而避免建立新物件。

不變性的重要性

字串的不變性在記憶體中起著至關重要的作用管理。由於對字串的參考可以指向相同基礎對象,因此修改其中一個物件的內容將影響所有參考。因此,不變性確保原始字串被保留,即使其引用被修改。

String 類別的最終性

為了防止可能破壞字串不變性的覆蓋, String 類別被標記為最終類別。這意味著沒有其他類別可以繼承和修改其行為。

總結

Java 中的字串是不可變的。當重新指派指向字串對象的參考變數時,將建立一個新的字串對象,從而有效地更新引用而不是修改現有對象。不變性對於記憶體效率和確保指向相同字串值的參考之間的一致性至關重要。

以上是為什麼在 Java 中重新分配 String 變數不會改變原始字串的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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