Java String.intern()
方法示例
原文: https://howtodoinjava.com/java/string/java-string-intern-method-example/
Java String.intern()
返回字符串池中存在的相等字符串字面值的引用。 如果字符串池中存在现有的字符串字面值,则返回其引用。 否则,将创建具有相同内容的新字符串,并返回对新字符串的引用。
使用String.equals()
方法检查字符串是否相等。
1. 字符串池
字符串池是堆内存中的保留内存区域,Java 用于存储字符串常量。 请注意,默认情况下 Java 字符串是不可变的。
Java 在字符串池中仅存储每个不同String
值的一个副本。 它有助于在程序执行期间重用String
对象以节省内存。 在运行的程序中可能有很多对字符串的引用,但是在字符串池中只有字符串的副本。
1.1 两种创建字符串的方法
在 Java 中,我们可以通过两种方式创建字符串。
String str1 = new String("hello world");
String str2 = "hello world";
在上面的示例中,两种方法都用于创建字符串,但是建议稍后使用字符串字面值。 字符串字面值总是进入字符串池。
当我们使用new
关键字创建字符串时,将创建两个对象,即一个在堆区中,另一个在字符串常量池中。 创建的字符串对象引用始终指向堆区域对象。
要获取在字符串池中创建的相同对象的引用,请使用intern()
方法。
2. Java String.intern()
方法
String.intern()
返回对字符串池中存在的相等字符串字面值的引用。
众所周知,所有字符串字面值都是在字符串池中自动创建的,因此intern()
方法适用于通过'new'
关键字创建的String
对象。
String.intern()
是原生方法。 借助intern()
方法,可以获得原始字符串对象对应的String
常量池对象的引用。
3. Java String.intern()
示例
Java 程序使用String.intern()
方法插入字符串。
public class StringExample
{
public static void main(String[] args)
{
//String object in heap
String str1 = new String("hello world");
//String literal in pool
String str2 = "hello world";
//String literal in pool
String str3 = "hello world";
//String object interned to literal
//It will refer to existing string literal
String str4 = str1.intern();
System.out.println(str1 == str2); //false
System.out.println(str2 == str3); //true
System.out.println(str2 == str4); //true
}
}
程序输出。
false
true
true
在此示例中,我们学习了内联 Java 中的字符串。 这是本机方法,可提供高性能。
参考文献: