HOWTO · Java
Java 中的字串池
本教程演示了在 Java 中使用字串池。
本頁內容
字串池是 Java 堆中的一個儲存區域。它是 Java 虛擬機器儲存字串的特殊記憶體區域。
本教程解釋並演示了 Java 中的字串池。
Java 中的字串池
字串池用於提高效能並減少記憶體開銷。
字串分配對時間和記憶體的成本很高,因此 JVM 在初始化字串的同時執行一些操作以降低這兩種成本。這些操作是使用字串池執行的。
每當一個字串被初始化時,Java 虛擬機器都會首先檢查池,如果初始化的字串已經存在於池中,它會返回一個對池化例項的引用。如果初始化的字串不在池中,則會在池中建立一個新的字串物件。
下圖演示了 Java 堆中字串池的概覽。
這是字串池如何工作的分步過程;讓我們以上面的圖片為例。
當類被載入時,Java 虛擬機器開始工作。
- JVM 現在將查詢 Java 程式中的所有字串文字。
- 首先,JVM 找到字串變數
d1,它具有字面量Delftstack1; JVM 將在 Java 堆記憶體中建立它。 - JVM 在字串常量池記憶體中放置對文字
Delfstack1的引用。 - JVM 然後尋找其他變數;如上圖所示,它會找到帶有文字
Delfstack2的d2和帶有與d1相同文字的d3,即Delftstack1。 - 現在,字串
d1和d3具有相同的文字,因此 JVM 會將它們引用到字串池中的同一物件,從而為另一個文位元組省記憶體。
現在讓我們執行 Java 程式,演示圖中描述的示例和過程。參見示例:
package Delfstack;
public class String_Pool {
public static void main(String[] args) {
String d1 = "Delftstack1";
String d2 = "Delftstack2";
String d3 = "Delftstack1";
if (d1 == d2) {
System.out.println("Both Strings Refers to the same object in the String Pool");
} else {
System.out.println("Both Strings Refers to the different objects in the String Pool");
}
if (d1 == d3) {
System.out.println("Both Strings Refers to the same object in the String Pool");
} else {
System.out.println("Both Strings Refers to the different objects in the String Pool");
}
}
}
此程式碼將與圖片中的示例完全相同,併為三個變數建立兩個物件。見輸出:
Both Strings Refers to the different objects in the String Pool
Both Strings Refers to the same object in the String Pool