String.intern() 是 Java 中的一个方法,它用于将字符串对象添加到字符串常量池中,并返回一个指向常量池中该字符串的引用。这个方法在某些情况下可以用来优化字符串的内存使用,特别是在处理大量字符串时。
常量池是 Java 运行时的一个区域,用于存储字符串文字和已经通过 String.intern() 方法添加到常量池中的字符串对象。
当你调用 String.intern() 方法时,它会检查字符串常量池中是否已经存在一个等于当前字符串的对象。如果存在,那么 intern() 方法返回常量池中的引用,如果不存在,它会将当前字符串添加到常量池中,并返回这个新添加的引用。
String str1 = "hello";
String str2 = new String("hello");// 在常量池中添加 "hello" 并返回常量池引用
String internedStr1 = str1.intern();// 在常量池中找到 "hello" 的引用
String internedStr2 = str2.intern();System.out.println(str1 == internedStr1); // true
System.out.println(str1 == internedStr2); // true
示例中,str1.intern() 方法将会返回常量池中的引用,而 str2.intern() 会找到已经在常量池中的引用。这样,你可以在不同的字符串对象之间进行引用的比较,而不是内容的比较,从而节省内存。
适用场景
使用 String.intern() 方法的一个常见场景是在处理大量重复的字符串时,例如从外部数据源读取字符串,然后在代码中进行处理。通过使用 intern(),你可以节省内存,因为相同内容的字符串在常量池中只会存储一份。
注意
虽然 String.intern() 可以在一些情况下提供性能和内存优化,但过度使用它也可能导致内存占用变大,因为字符串常量池本身也需要占用一定的内存。在合适的场景下使用它能够带来好处,但不适当地使用可能会影响性能。