如何找出给定的String已经在Java String池中了?

ang*_*her 7 java

有没有任何方法或技术可以知道给定String s的字符串池中是否已存在?Java String池创建的方式和时间?它包含的初始成员是什么?

jlo*_*rdo 4

我的回答是:没有通用的解决方案。你能做的是:

\n\n
boolean wasAlreadyInterned = str.intern() == str;\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这有一个副作用,现在它肯定被拘留了。

\n\n

JavaDocString#intern说,类 String 私有地维护一个字符串池,该池最初是空的。

\n\n

如果您查看该类的实现,String您会看到

\n\n
public native String intern();\n
Run Code Online (Sandbox Code Playgroud)\n\n

Java语言规范,第 3.10.5 章,字符串文字说:

\n\n
\n

字符串文字 - 或者更一般地,常量表达式 (\xc2\xa715.28) 的值的字符串 - 被“保留”,以便使用 方法共享唯一的实例String.intern

\n
\n