StringBuilder 类表示可变字符的字符串。
名称 | 说明 |
Capacity属性 | 获取或设置可包含在当前实例所分配的内存中的最大字符数 |
Length属性 | 获取或设置当前 StringBuilder 对象的长度 |
Capacity属性:
一般在我们直接New的情况下StringBuildersb=new StringBuilder(),它的预设Capacity是16,每次Append个长度为1的字符串,当我们加入的字符串长度超过16后,它就自动变大,它的Capacity就会变为32,之后就是64,128,256,512….的倍增方式.
Capacity : 16 Length : 0 [预设为16]
Capacity : 32 Length : 17 [第一次Append]
Capacity : 64 Length : 33 [第二次Append]
现在在代码里改变Capacity的属性值为2,
StringBuilder str = new StringBuilder();
str.Capacity = 2; //设置Capacity属性为2
追加长度为2的字符串:
str.Append("01"); //追加长度为2的字符串
Capacity : 2 Length : 0 [预设为2]
Capacity : 2 Length : 2 [第一次Append]
Capacity : 4 Length : 4 [第二次Append]
Capacity : 8 Length : 6 [第三次Append]
在某一次追加字符串后Length的属性大于之前Capacity的2倍时,Capacity的属性会自动变为当前Length的属性。
StringBuilder str = new StringBuilder();
str.Capacity = 2;
str.Append("01234"); //追加长度为5的字符串
str.Append("012"); //追加长度为3的字符串
str.Append("0123456789012"); //追加长度为13的字符串
str.Append("012"); //追加长度为3的字符串
Capacity : 2 Length : 0 [预设为2]
Capacity : 5 Length : 5 [第一次Append]
Capacity : 10 Length : 8 [第二次Append]
Capacity : 21 Length : 21 [第三次Append]
Capacity : 42 Length : 24 [第三次Append]
Length属性:
StringBuilder.Length:获取或设置当前 StringBuilder 对象的长度。
StringBuilder str = new StringBuilder("123"); //长度为3
str.Length = 2; //设置当前 StringBuilder 对象的长度
结果为12
异常产生:
当str中已有字符串时,在设置str.Capacity时必须大于当前的Length,不然会报“容量小于当前大小”错误