在 Java 中,什么时候可以使用 String 类的 intern() 方法?
**String 类的 intern() 方法**可以用来处理 Java 中的**字符串重复问题**。使用 **intern()**,我们可以节省大量由**重复字符串实例**消耗的内存。如果一个字符串的内容与另一个字符串相同,但它们可能占用不同的内存位置,则该字符串是重复的。
我们知道,JVM 为字符串字面量维护一个**单独的堆内存**以提高性能。一旦我们声明一个字符串字面量,它就会进入这个**池**,如果另一个变量被赋予相同的字面量值,它将从池中获取**而不是创建一个新的对象**并将其存储在**堆**中。但是,如果字符串是使用**new 构造器**声明的,即使池中存在字面量,也会创建一个新的对象。为了避免这种情况并强制 JVM 从池中获取字面量,我们使用 **intern()** 方法。
Java 默认情况下会自动将所有字符串放入字符串池中。**intern()** 方法可以用于带有 **new String()** 的字符串,以便使用 **== 运算符** 对它们进行比较。
示例
public class StringInternClassTest {
public static void main(String[] args) {
String s1 = "Tutorix";
String s2 = "Tutorix";
String s3 = new String("Tutorix");
final String s4 = s3.intern();
String s5 = "?Tutorix".substring(1);
String s6 = s5.intern();
System.out.println(s1 == s2);
System.out.println(s2 == s3);
System.out.println(s3 == s4);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s1 == s5);
System.out.println(s1 == s6);
System.out.println(s1.equals(s2));
System.out.println(s2.equals(s3));
System.out.println(s3.equals(s4));
System.out.println(s1.equals(s4));
System.out.println(s1.equals(s3));
}
}输出
true false false false true false true true true true true true
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP