当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。