我在我的代码中使用StringBuilder
, 而不是String
, 以努力使代码在所有解析和连接过程中具有时间效率。
但是当我查看它的来源时,and的substring()
方法
返回的是 a而不是 a 。AbstractStringBuilder
StringBuilder
String
StringBuilder
这背后的想法是什么?
谢谢。
我在我的代码中使用StringBuilder
, 而不是String
, 以努力使代码在所有解析和连接过程中具有时间效率。
但是当我查看它的来源时,and的substring()
方法
返回的是 a而不是 a 。AbstractStringBuilder
StringBuilder
String
StringBuilder
这背后的想法是什么?
谢谢。
该substring
方法返回不可变的原因String
是,一旦您在 中获取字符串的一部分StringBuilder
,它必须进行复制。它不能在StringBuilder
's 内容的中间为您提供可变的“实时视图”,否则您会遇到哪些更改应用于哪些字符串的冲突。
由于无论如何都要制作副本,因此它也可能是不可变的:如果您愿意,可以通过StringBuilder
在它周围构造 a 来轻松地使其可变,并充分理解它与可变的原件分离。
要从一个StringBuilder
包含原始片段的另一个转到另一个,您可以使用:
StringBuilder original = ...;
StringBuilder sub = new StringBuilder().append(original, offset, length);
这可以作为 的方法提供original
,但事实并非如此。
除此之外,您应该在进行此类微优化之前分析您的代码。