【发布时间】:2013-04-13 22:59:42
【问题描述】:
在 Java 6 之前,我们在 String 上有一个恒定时间子字符串。在 Java 7 中,为什么他们决定复制 char 数组 - 并降低到线性时间复杂度 - 而像 StringBuilder 这样的东西正是为此而生的?
【问题讨论】:
-
为了避免字符串长度过小,防止垃圾回收任意大的
char[]。 -
使用
StringBuilder应该可以解决这样的问题吧? -
使用
StringBuilder可让您在发现问题存在后解决该问题。但它并不能修复现有代码中的内存泄漏。此更改修复了现有代码中的内存泄漏,并且由于缓冲区副本通常是硬件支持的,因此最终不会为任何适合一个虚拟内存页面的子字符串花费线性时间。