當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Java String intern()用法及代碼示例

Java String 類 intern() 方法返回內部字符串。它返回字符串的規範表示。

如果它是由新關鍵字創建的,它可用於從內存中返回字符串。它在字符串常量池中創建堆字符串對象的精確副本。

簽名

intern() 方法的簽名如下:

public String intern()

返回

字符串

String.intern() 方法的需要和工作

在 Java 中創建字符串時,它會占用堆中的內存。此外,我們知道 String 類是不可變的。因此,每當我們使用 new 關鍵字創建字符串時,都會在堆中為相應的字符串分配新的內存,這與數組的內容無關。考慮以下代碼片段。

String str = new String("Welcome to JavaTpoint."); 
String str1 = new String("Welcome to JavaTpoint");
System.out.println(str1 == str); // prints false

println 語句打印 false,因為為每個字符串文字分配了單獨的內存。因此,在內存中創建了兩個新的字符串對象,即 str 和 str1。持有不同的引用。

我們知道在 Java 中創建對象是一項代價高昂的操作。因此,為了節省時間,Java 開發人員提出了字符串常量池 (SCP) 的概念。 SCP 是堆內存中的一個區域。它包含唯一的字符串。為了將字符串放入字符串池,需要調用 intern() 方法。在字符串池中創建對象之前,JVM 會檢查字符串是否已經存在於池中。如果字符串存在,則返回其引用。

String str = new String("Welcome to JavaTpoint").intern(); // statement - 1
String str1 = new String("Welcome to JavaTpoint").intern(); // statement - 2
System.out.println(str1 == str); // prints true

在上麵的代碼片段中,對 String 對象調用了 intern() 方法。因此,內存分配在SCP中。對於第二條語句,沒有創建新的字符串對象,因為 str 和 str1 的內容相同。因此,為 str1 返回在第一條語句中創建的對象的引用。因此, str 和 str1 都指向相同的內存。因此,print 語句打印 true。

Java 字符串 intern() 方法示例

文件名:InternExample.java

public class InternExample{
public static void main(String args[]){
String s1=new String("hello");
String s2="hello";
String s3=s1.intern();//returns string from pool, now it will be same as s2
System.out.println(s1==s2);//false because reference variables are pointing to different instance
System.out.println(s2==s3);//true because reference variables are pointing to same instance
}}

輸出:

false
true

Java 字符串 intern() 方法示例 2

讓我們再看一個例子來理解字符串實習生的概念。

文件名:InternExample2.java

public class InternExample2 {
	public static void main(String[] args) {		
		String s1 = "Javatpoint";
		String s2 = s1.intern();
		String s3 = new String("Javatpoint");
		String s4 = s3.intern();		
		System.out.println(s1==s2); // True
		System.out.println(s1==s3); // False
		System.out.println(s1==s4); // True		
		System.out.println(s2==s3); // False
		System.out.println(s2==s4); // True		 
		System.out.println(s3==s4); // False		
	}
}

輸出:

true
false
true
false
true
false

要記住的要點

以下是關於 intern() 方法需要記住的一些要點:

1) 字符串字麵量總是調用 intern() 方法,無論是否與字符串字麵量一起提及 intern() 方法。例如,

String s = "d".intern();
String p = "d"; // compiler treats it as String p = "d".intern();
System.out.println(s == p); // prints true

2) 每當我們使用 new 關鍵字創建 String 對象時,都會創建兩個對象。例如,

String str = new ("Hello World");

在這裏,由於使用了 new 關鍵字,在 SCP 之外的堆內存中創建了一個對象。因為我們也得到了字符串文字 ("Hello World");因此,如果文字 "Hello World" 已經不存在於 SCP 中,則會在 SCP 內創建一個對象。





相關用法


注:本文由純淨天空篩選整理自 Java String intern()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。