StringBuilder的Length和Capacity属性实践

  • 时间:
  • 浏览:2

当Capacity小于Length时,会抛出异常System.ArgumentOutOfRangeException.

输出结果为:10 16

接着修改下代码,sb.Capacity=8。就说Capacity的2倍都比Length小,这时输出的结果为:18,18. 这里并有的是在Capacity的初值8的基础上成倍增加。

StringBuilder.Capacity:获取或设置可涵盖在当前实例所分配的内存中的最大字符数。

3.2B实践

1.普通实践

在代码后面 更改Length的值,这时在看看它们的值各是几个。代码如下:

能能 知道:当亲戚朋友显示的更改了Length的值很久,字符串前面的帕累托图保留,后面 的丢弃了。最终的Length值为15,这时仍然小于16,就说Capacity为16。更改下代码:

几天前的一次笔试中遇到了关于StringBuilder的Length和Capacity属性的疑问报告 ,很久忽略了。今天实践下:

这能能 能能 说明StringBuilder的Capacity最小分配的长度是16.当初始化另另有一个 长度为17的字符串时,如StringBuilder sb = new StringBuilder("01234567891234567"),

2.文艺实践

显示的是17。

StringBuilder.Length:获取或设置当前 StringBuilder 对象的长度。

可能显示的更改Capacity的值会为什么会么会会 样?

这时输出18,1000.可能18超出了这里可能指定的Capacity的值15,成倍增长到1000. 就说Capacity增长的基数默认是16,可能有显示指定,则为指定的值。

输出结果为:

官方解释如下:

 sb.Append("012345678910");在前面的基础上增加这里的长度到12位。这时输出结果为:Length为18,Capacity为32。说明Capacity是以16的倍数增长。

 我我觉得从后面 的实践能能 看出,Capacity的大小分配是在满足Length的情況下,尽量少占用空间。跟Length和显示指定的Capacity大小有关系。