一尘不染

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

java

关于Javadoc的内容String.intern()不多。(简而言之:它返回字符串的规范表示形式,从而允许使用来比较内部字符串==)

  • 我什么时候可以使用此功能String.equals()
  • 是否存在Javadoc中未提及的副作用,即JIT编译器或多或少的优化?
  • 还有其他用途String.intern()吗?

阅读 433

收藏
2020-03-09

共1个答案

一尘不染

我何时会使用此函数来支持String.equals()

当你需要速度时,因为可以按引用比较字符串(==比等于快)

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

主要的缺点是你必须记住要确保实际上要对要比较的所有字符串进行intern()。忘记intern()所有字符串很容易,然后你会得到令人困惑的不正确结果。另外,为了大家的缘故,请确保非常清楚地记录你所依赖的字符串是内部化的。

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

(来自JGuru)

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

2020-03-09