Javadoc aboutString.intern()没有提供太多细节。(简而言之:它返回字符串的规范表示,允许使用 比较内部字符串==)
String.intern()
==
String.equals()
我什么时候会使用这个函数来支持 String.equals()
当您需要 速度 时,因为您可以通过引用比较字符串(== 比 equals 快)
Javadoc 中是否存在未提及的副作用?
主要缺点是您必须记住确保您确实执行了 intern() 所有要比较的字符串。很容易忘记对所有字符串进行 intern() 操作,然后您可能会得到令人困惑的错误结果。另外,为了每个人的利益,请务必非常清楚地记录您依赖于被内化的字符串。
如果您决定将字符串内部化,第二个缺点是 intern() 方法相对昂贵。它必须管理唯一字符串池,因此它做了相当多的工作(即使字符串已经被内部化了)。所以,在你的代码设计中要小心,这样你就可以在 intern() 中输入所有适当的字符串,这样你就不必再担心它了。
(来自JGuru)
第三个缺点(仅限 Java 7 或更低版本):实习字符串位于 PermGen 空间中,通常非常小;您可能会遇到带有大量可用堆空间的 OutOfMemoryError。
(来自迈克尔·博格沃特)