为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-07-29 16:46:27
使用java.lang.String.intern()是一种好习惯吗?Javadoc关于String.intern()没有提供太多细节。(简而言之:它返回字符串的规范表示,允许使用内部字符串进行比较==)我何时会使用此功能String.equals()?是否存在Javadoc中未提及的副作用,即JIT编译器或多或少的优化?有进一步的用途String.intern()吗?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

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

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

是否有Javadoc中没有提到的副作用?

主要的缺点是你必须记住确保你实际上做了你要比较的所有字符串intern()。很容易忘记intern()所有字符串,然后你可以得到令人困惑的错误结果。此外,为了每个人的利益,请务必非常清楚地记录您依赖于内部化的字符串。

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

(来自JGuru)

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

(来自Michael Borgwardt)


查看完整回答
反对 回复 2019-07-29
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这(几乎)与字符串比较无关。如果您的应用程序中有许多具有相同内容的字符串,则字符串实习用于保存内存。通过使用String.intern()应用程序,从长远来看只有一个实例,副作用是你可以执行快速引用相等比较而不是普通的字符串比较(但这通常是不可取的,因为它只是因为忘记实习生而很容易破解单个实例)。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 486 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信