【发布时间】:2016-08-08 00:34:30
【问题描述】:
String s1=new String("abcd");
s2=s1.intern();
据说intern() 将在池中创建一个字符串文字,如果它不存在的话。
我的问题是这种情况何时会出现字符串对象存在但不存在文字的情况?而 intern() 将不得不实际创建一个新的字面量,然后返回对字面量的引用。
【问题讨论】:
-
我们不想将每个字符串都放入字符串池中。仅当您稍后要重用此字符串时,将字符串存储在池中才有意义,例如,它适用于您在代码中创建的字符串文字,您可能需要多次使用它,例如
for (i..){ System.out.print("write your number:"); array[i]=readNumber();}。但是,如果您从外部源(如文件/控制台/套接字/其他)逐行读取一些文本,您并不真的想让 JVM 记住所有这些行。您可能只想打印一次,然后让 GC 将它们从内存中删除。
标签: java string string-literals string-interning