intern() 是否曾经在池中创建文字?

Does intern() ever create a literal in the pool?

String s1=new String("abcd");
s2=s1.intern();

据说 intern() 将在池中创建一个字符串文字,如果它不存在的话。

我的问题是什么时候会出现字符串对象存在但文字不存在的情况?而 intern() 将不得不实际去创建一个新的文字,然后 return 对文字的引用。

例如:

String first = "ab";
String second = "cd";
String interned = first.concat(second).intern();

程序中的大多数字符串都是动态创建的:通过连接值、通过套接字接收它们、从文件或数据库、或者从控制台或 GUI 读取它们。

请注意,您的术语有误。 intern() 不创建字符串文字。它将一个字符串添加到池中,字符串字面量(即在字节码中 字面 出现的字符串,如 "abcd")存储在池中,并显式驻留字符串。