.net – 用字符串初始化的StringBuilder是否包含该字符串的确切(仅)空间?

我想知道这段代码是否……
StringBuilder sb = new StringBuilder("Please read the following messages.");

…使用与传递给构造函数的字符串完全一样大的缓冲区初始化sb.一方面,这似乎是最合乎逻辑的事情.另一方面,似乎有点打败StringBuilder类的目的,它的一个最常见的用途是提供可变性,使重复的​​追加更有效. (第一次调用Append,如果我的问题的答案是“是”,则需要sb自行调整大小.)

然后再次,我想可以将其视为类似于List< T>的构造函数.采用IEnumerable< T>作为参数.也许在这种情况下的假设是你不打算附加很多,而是操纵已经存在的东西.

在这方面做的唯一真正的研究是检查MSDN documentation on StringBuilder,它没有提供答案(它表示构造函数使用指定的字符串初始化实例,但没有指出如何使用字符串).

编辑:所以这是“特定于实现”……这对其他人来说似乎并不奇怪吗?我的意思是,StringBuilder类的目的是提供对字符串执行大量操作的替代方法,在此过程中创建大量不可变的字符串实例;因此,这是为了提高效率.我觉得应该指定这个构造函数的行为,以便开发人员可以做出明智的决定如何使用它而不管平台.

我的意思是,它是由微软以某种方式实现的;他们可以很容易地将其放入文档中(迫使其他实现也遵循).只是个人困惑的来源……

解决方法

这是一个您不必担心的实现细节.但是,使用 .NET reflector,并查看构造函数(其他构造函数调用)的(string,int32,int32)重载,我们可以看到它选择的容量是16的倍数(下一个最大的请求尺寸)

编辑

实际上,它是16 x 2 ^ n,选择“n”的值作为下一个最大尺寸

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...