4

可能重复:
何时使用 intern()
我们何时应该使用 String 的 intern 方法?

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

4

3 回答 3

1

Java 不会在运行时自动生成字符串。(它在编译时对字符串常量这样做)。

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

于 2012-05-05T13:47:20.460 回答
0

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

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

于 2012-05-05T13:46:20.940 回答
0

它只会自动实习字符串文字。如果您自己创建字符串(例如,来自网络的输入流),它将不会被实习。如果您希望有很多相同字符串的实例,那么可能值得将它们实习,而不是在堆上放置大量等效字符串。就个人而言,我从未使用过它。

于 2012-05-05T13:47:29.207 回答