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 indexOf()用法及代碼示例
- Java String indent()用法及代碼示例
- Java String isEmpty()用法及代碼示例
- Java String valueOf()用法及代碼示例
- Java String getChars()用法及代碼示例
- Java String substring()用法及代碼示例
- Java String replace()用法及代碼示例
- Java String contains()用法及代碼示例
- Java String copyValueOf()用法及代碼示例
- Java String toString()用法及代碼示例
- Java String endsWith()用法及代碼示例
- Java String split()用法及代碼示例
- Java String lines()用法及代碼示例
- Java String repeat()用法及代碼示例
- Java String strip()用法及代碼示例
- Java String lastIndexOf()用法及代碼示例
- Java String equals()用法及代碼示例
- Java String replaceAll()用法及代碼示例
- Java String subSequence()用法及代碼示例
- Java String startsWith()用法及代碼示例
注:本文由純淨天空篩選整理自 Java String intern()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。