3

我在我的代码中使用StringBuilder, 而不是String, 以努力使代码在所有解析和连接过程中具有时间效率。

但是当我查看它的来源时,and的substring()方法 返回的是 a而不是 a 。AbstractStringBuilderStringBuilderStringStringBuilder

这背后的想法是什么?

谢谢。

4

2 回答 2

6

substring方法返回不可变的原因String是,一旦您在 中获取字符串的一部分StringBuilder,它必须进行复制。它不能在StringBuilder's 内容的中间为您提供可变的“实时视图”,否则您会遇到哪些更改应用于哪些字符串的冲突。

由于无论如何都要制作副本,因此它也可能是不可变的:如果您愿意,可以通过StringBuilder在它周围构造​​ a 来轻松地使其可变,并充分理解它与可变的原件分离。

于 2013-11-12T16:29:29.193 回答
1

要从一个StringBuilder包含原始片段的另一个转到另一个,您可以使用:

StringBuilder original = ...;
StringBuilder sub = new StringBuilder().append(original, offset, length);

可以作为 的方法提供original,但事实并非如此。

除此之外,您应该在进行此类微优化之前分析您的代码。

于 2013-11-12T16:31:51.080 回答