在 Java 中,什麼時候可以使用 String 類的 intern() 方法?
**String 類的 intern() 方法**可以用來處理 Java 中的**字串重複問題**。使用 **intern()**,我們可以節省大量由**重複字串例項**消耗的記憶體。如果一個字串的內容與另一個字串相同,但它們可能佔用不同的記憶體位置,則該字串是重複的。
我們知道,JVM 為字串字面量維護一個**單獨的堆記憶體**以提高效能。一旦我們宣告一個字串字面量,它就會進入這個**池**,如果另一個變數被賦予相同的字面量值,它將從池中獲取**而不是建立一個新的物件**並將其儲存在**堆**中。但是,如果字串是使用**new 構造器**宣告的,即使池中存在字面量,也會建立一個新的物件。為了避免這種情況並強制 JVM 從池中獲取字面量,我們使用 **intern()** 方法。
Java 預設情況下會自動將所有字串放入字串池中。**intern()** 方法可以用於帶有 **new String()** 的字串,以便使用 **== 運算子** 對它們進行比較。
示例
public class StringInternClassTest {
public static void main(String[] args) {
String s1 = "Tutorix";
String s2 = "Tutorix";
String s3 = new String("Tutorix");
final String s4 = s3.intern();
String s5 = "?Tutorix".substring(1);
String s6 = s5.intern();
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s1 == s5);
System.out.println(s1 == s6);
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s4));
System.out.println(s1.equals(s4));
System.out.println(s1.equals(s3));
}
}輸出
true false false false true false true true true true true true
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP