0

打电话的好主意:

 "".intern();

在启动时的企业应用程序中(一次,就像在第一个 servlet 初始化中一样?)所以所有具有空字符串值的后续字符串都是相同的引用?

更进一步,在 50-80 个字符串上调用实习生会有显着的收益,我们知道这些字符串会在这个应用程序中大量使用(从数据库或资源文件加载 - 我们知道只有少数字符串可以定制,但一旦定制为安装,很少更改)?

4

2 回答 2

1

实习空字符串(或任何其他字符串)并不能保证后续实例将使用相同的对象,除非您也实习他们。

合同是 2 个字符串引用同一个对象(因此是==),如果它们是equals()并且被实习过。

除了实习有成本,每个都intern()意味着在池中搜索。

于 2013-08-23T10:33:44.667 回答
1

不似乎不是一个好主意。它不像这样工作。请参阅 使用 java.lang.String.intern() 是一种好习惯吗?

特别是@GlenBest 对此答案的评论:https ://stackoverflow.com/a/1091081/520567

简而言之,您一无所获,因为源代码中的常量字符串无论如何都会被实习,并且您需要在程序执行期间实习任何出于任何原因想要实习的动态字符串。

于 2013-08-23T10:49:41.243 回答