小编典典

使用 java.lang.String.intern() 是一种好习惯吗?

all

Javadoc
aboutString.intern()没有提供太多细节。(简而言之:它返回字符串的规范表示,允许使用
比较内部字符串==

  • 我什么时候会使用这个功能来支持String.equals()
  • Javadoc中是否有没有提到的副作用,即JIT编译器或多或少的优化?
  • 有没有进一步的用途String.intern()

阅读 69

收藏
2022-07-13

共1个答案

小编典典

我什么时候会使用这个函数来支持 String.equals()

当您需要 速度 时,因为您可以通过引用比较字符串(== 比 equals 快)

Javadoc 中是否存在未提及的副作用?

主要缺点是您必须记住确保您确实执行了 intern() 所有要比较的字符串。很容易忘记对所有字符串进行 intern()
操作,然后您可能会得到令人困惑的错误结果。另外,为了每个人的利益,请务必非常清楚地记录您依赖于被内化的字符串。

如果您决定将字符串内部化,第二个缺点是 intern()
方法相对昂贵。它必须管理唯一字符串池,因此它做了相当多的工作(即使字符串已经被内部化了)。所以,在你的代码设计中要小心,这样你就可以在 intern()
中输入所有适当的字符串,这样你就不必再担心它了。

(来自JGuru)

第三个缺点(仅限 Java 7 或更低版本):实习字符串位于 PermGen 空间中,通常非常小;您可能会遇到带有大量可用堆空间的
OutOfMemoryError。

(来自迈克尔·博格沃特)

2022-07-13