在 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

更新時間: 2020年2月7日

352 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.