intern 方法返回字符串的规范形式,它可以与字符串本身不同或相同。它有助于提高性能还是仅仅消除不确定性?
问问题
62 次
3 回答
1
intern
根本不改变字符串;它只是在特殊用途的常量池中为其分配内存,它不是常规堆的一部分(它在永久代中)。性能只是间接地得到改善:如果你知道你正在比较两个实习字符串,你可以可靠地使用==
而不是equals
.
于 2013-01-16T13:19:06.370 回答
1
intern() 通过减少重复字符串的数量来提高性能。这减少了内存消耗,但更重要的是提高了缓存的使用。(缓存比你的主内存小得多)
但是,如果在此池中放置太多字符串,直接使用它可能会出现性能问题(普通程序不会这样做,但您可以编写一个程序来这样做)这是因为将字符串添加到池中的成本很高 O (N) 不是您可能假设的 O(log N),而且清理起来更加昂贵。在 java 7 中,字符串文字池被移到堆中以减少大型字符串文字池的影响,但我仍然建议您谨慎使用它(如果有的话)。
于 2013-01-16T13:33:06.523 回答
0
当你对一个字符串调用intern方法时,它会检查字符串池是否有那个字符串。如果存在,它会返回对该字符串的引用,否则会向池中添加一个新的字符串。性能可以提高,因为你可以使用== 而不是 equals(== 检查更快,因为它只会比较对象地址而不是其内容),但我强烈建议不要使用 == 来比较字符串。
于 2013-01-16T13:19:20.890 回答