但是,我越想越怀疑这个概念的好处。在我看来,优点大都是理论上的:
- 首先,要使用自动字符串插值,所有字符串都必须是不可变的,这使得许多字符串处理任务比必要的更加困难。(是的,我听过所有关于不变性的论点,但这不是重点。)
- 每次创建新字符串时,都必须将其与字符串插值表进行检查,这至少是O(N)操作。(编辑:其中N是字符串的大小,而不是表的大小,因为这让人感到困惑。) 因此,除非字符串相等比较与新字符串创建的比率相当高,否则节省的时间净值可能不是正值。
- 如果字符串相等表使用强引用,则当不再需要字符串时,字符串永远不会被垃圾回收,从而浪费内存。另一方面,如果表使用弱引用,则字符串类需要某种终结器来从表中删除字符串,从而减慢GC过程。(这可能相当显着,具体取决于字符串间隔表的实现方式。最坏的情况下,在某些情况下,从哈希表中删除项可能需要对整个表进行O(N)重建。)
这只是我考虑实现细节的结果。我有什么遗漏吗?在一般情况下,字符串插值是否真的提供了任何重大好处?
编辑2:好吧,显然我从一个错误的前提出发。我谈话的对象从未指出新创建的字符串是可选的字符串插值,并且实际上给人留下了相反的印象。感谢Jon澄清此事。他的另一个答案也被接受。