使用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)
慕无忌1623718
TA贡献1744条经验 获得超4个赞
这(几乎)与字符串比较无关。如果您的应用程序中有许多具有相同内容的字符串,则字符串实习用于保存内存。通过使用String.intern()
应用程序,从长远来看只有一个实例,副作用是你可以执行快速引用相等比较而不是普通的字符串比较(但这通常是不可取的,因为它只是因为忘记实习生而很容易破解单个实例)。
添加回答
举报
0/150
提交
取消