Java 中 String intern() 方法的作用是什麼?


String 是 Java 中一個用於儲存字元序列的類,它屬於 java.lang 包。一旦建立了 String 物件,就無法修改它們(不可變)。

儲存

所有 String 物件都儲存在堆區的另一個記憶體位置,稱為 String 常量池

每當你定義一個 String 值時,JVM 都會在 String 常量池中建立一個具有該值的 String 物件。因此,如果你執行上述程式,將在 String 常量池中建立兩個 String 值。

intern() 方法

此方法從唯一 String 值池中返回當前 String 的值。每當你對特定 String 呼叫此方法時,如果 String 常量池中已經包含一個與之相等的 String(根據 Object 類的 equals 方法),則將返回該 String。否則,當前 String 將新增到 String 常量池中並返回對它的引用。

即,如果你對兩個具有相同內容的 String 呼叫此方法,則保證它們共享相同的記憶體。

此方法有助於減少在存在多個重複值的情況下佔用的記憶體。

示例

在下面,我們建立了兩個具有相同內容的 String(使用 new 關鍵字)並使用“==”運算子比較它們。儘管這兩個物件具有相同的值,但由於它們不引用同一個物件(記憶體),因此結果將為 false。

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = "Hello";
      str2 = str2.intern();
      System.out.println(str1.equals(str2));
   }
}

輸出

false

但是,如果你在比較它們之前對這兩個物件呼叫 intern 方法,由於它確保如果這兩個物件具有相同的內容則共享相同的記憶體,因此結果將為 true。

public class InternExample {
   public static void main(String args[]) {
      String str1 = new String("Hello");
      str1 = str1.intern();
      String str2 = new String("Hello");
      str2 = str2.intern();
      System.out.println(str1==str2);
   }
}

輸出

true

更新於: 2019年10月10日

100 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.