原文: https://beginnersbook.com/2017/10/java-string-intern-method/

Java String intern()方法用于从内存中获取字符串(如果已存在)。此方法可确保所有相同的字符串共享相同的内存。例如,使用intern()方法创建一个字符串"hello" 10 次将确保内存中只有一个"Hello"实例,并且所有 10 个引用都指向同一个实例。

一个简单的 Java String intern()方法示例

此示例演示了intern()方法的用法。此方法在内存池中搜索提到的String,如果找到该字符串,则返回它的引用,否则它为该字符串分配新的内存空间并为其分配引用。

  1. public class Example{
  2. public static void main(String args[]){
  3. String str1 = "beginnersbook";
  4. /* The Java String intern() method searches the string "beginnersbook"
  5. * in the memory pool and returns the reference of it.
  6. */
  7. String str2 = new String("beginnersbook").intern();
  8. //prints true
  9. System.out.println("str1==str2: "+(str1==str2));
  10. }
  11. }

输出:

  1. str1==str2: true

Java 字符串字面值

当我们使用字符串字面值创建字符串而不是使用new关键字创建字符串时,java 会自动实例化字符串。让我们举个例子来理解这个:

  1. public class Example{
  2. public static void main(String args[]){
  3. String str1 = "Hello";
  4. //Java automatically interns this
  5. String str2 = "Hello";
  6. //This is same as creating string using string literal
  7. String str3 = "Hello".intern();
  8. //This will create a new instance of "Hello" in memory
  9. String str4 = new String("Hello");
  10. if ( str1 == str2 ){
  11. System.out.println("String str1 and str2 are same");
  12. }
  13. if ( str2 == str3 ){
  14. System.out.println("String str2 and str3 are same" );
  15. }
  16. if ( str1 == str4 ){
  17. //This will not be printed as the condition is not true
  18. System.out.println("String str1 and str4 are same" );
  19. }
  20. if ( str3 == str5 ){
  21. System.out.println("String str3 and str5 are same" );
  22. }
  23. }
  24. }

输出:

  1. String str1 and str2 are same
  2. String str2 and str3 are same
  3. String str3 and str5 are same

相关文章:

  1. Java String format()方法
  2. Java String matches()方法
  3. Java String trim()和 hashCode()方法
  4. Java String replace()replaceFirst()replaceAll()方法

参考: