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

Dan*_*Tao 6 .net stringbuilder buffer constructor

我想知道这段代码是否......

StringBuilder sb = new StringBuilder("Please read the following messages.");
Run Code Online (Sandbox Code Playgroud)

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

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

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


编辑:所以这是"特定于实现"......这对其他人来说似乎并不奇怪吗?我的意思是,宗旨的的StringBuilder类是提供一种替代执行了很多在操作中string,产生一吨不变的string沿途情况; 因此,这是为了提高效率.我觉得应该指定这个构造函数的行为,以便开发人员可以做出明智的决定如何使用它而不管平台.

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

Dam*_*ver 5

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

编辑

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