StringBuilder扩展机制和java中不太一样。
C#中StringBuilder默认容量:16
C#中StringBuilder默认扩容机制:16 * 2的N次冥
C#中StringBuilder扩容时,会出现空间浪费。
StringBuilder也可以设置初始容量也会按照 初始大小* 2的N次冥的形式扩容
结论 少量的字符串拼接(添加),无法体现StringBuilder高性能,
大量的字符串增删改操作时才可以体现StringBuilder高性能。
当没有过多的修改操作只有查询时string的速度快
StringBuilder sb = new StringBuilder();
sb.Append("hello"); // 累加
sb.AppendLine("world");// 累加字符串后,会添加换行符,换行符占两个索引位置。
sb.Append("中文");
sb.AppendFormat("{0:C2}\n", 789); // \' \" \\ \n \t
sb.AppendFormat("{0:P0}", 0.9);
// 插入:参数1:插入的起始索引。参数2:插入的数据(很多类型都支持)
sb.Insert(12, "aaaa");
// 删除。参数1:删除的起始索引。 参数2:删除数量
sb.Remove(12, 4);
sb.Replace("world", "世界");
Console.WriteLine(sb.ToString());
// 长度
StringBuilder sb2 = new StringBuilder("ab世界");
Console.WriteLine(sb2.Length);
// 清空
sb.Clear();
Console.WriteLine(sb.ToString());
char[] chars = new char[4];
sb2.CopyTo(0, chars, 1, 3);
foreach (char c in chars)
{
Console.WriteLine(c);
}
string s = "ab世界"; // 字面量值在常量池(即不是栈,也不堆)
StringBuilder sb3 = new StringBuilder("ab世界");
Console.WriteLine(sb2.Equals(s)); // false
// 规律:Equals一般比较是值。
Console.WriteLine(sb2.Equals(sb3));// true
// 规律:引用类型比较(除字符串string字面量外),一般比较的是地址。
Console.WriteLine(ReferenceEquals(sb2,sb3));// false
Console.WriteLine(sb3[3]); // char类型,索引访问单个字符