为什么java中存在实习方法?

时间:2012-05-05 13:41:50

标签: java string

  

可能重复:
  When to use intern()
  When should we use intern method of String?

java intern字符串会自动生成吗?如果它确实为什么字符串有一个显式的实习方法?需要显式调用时的任何特定用例?

3 个答案:

答案 0 :(得分:1)

Java不会自动在运行时创建实习字符串。 (它在编译时对字符串常量执行此操作)。

我有一个特定的用例,我保存了在接收地图中表示的记录的组件中使用的约30%的堆。每个记录中的密钥集是相同的,但是每个接收到的新记录都创建了密钥字符串的新实例。通过实际键入字符串,堆消耗大大减少。

答案 1 :(得分:0)

来自JavaDoc:“所有文字字符串和字符串值常量表达式都是实例化的。”

据我所知,在运行时实习并不能提供任何性能优势。如果您有许多动态创建的字符串,它可以保护您的一些堆空间,其中包含重复项。不过,使用你自己的哈希对我来说似乎更安全。

答案 2 :(得分:0)

它只会自动实习字符串文字。如果您自己创建字符串(例如,来自网络的输入流),则不会实现该字符串。如果你希望有相同字符串的很多实例,那么它们可能是值得的并且可以实现它们,而不是在堆上有很多等效的字符串。就个人而言,我从来没有使用它。