string 在 C# 中本质是 引用类型,但由于其 不可变性(Immutable),它表现出类似 值类型 的行为。
string 一旦创建就无法修改,每次修改都会生成新的 string 对象,分配新的内存空间string的对象实例都存储在堆内存而不是在栈内存上。string 直接比较 内容,而非对象引用。== 和 Equals() 方法都基于字符串内容进行比较,Equals()可以自定义比较规则StringBuilder是 C# 提供的一个用于处理字符串的公共类,本质上是内部维护的是一个字符数组char[],StringBuilder 允许在原有字符串的基础上修改内容,而不会创建新的对象,从而提高字符串拼接和修改的效率,特别适用于频繁变更字符串的场景。
使用前需要引用命名空间
using System.Text
StringBuildercsharpusing System.Text;
StringBuilder sb = new StringBuilder(); // 默认初始化
StringBuilder sb2 = new StringBuilder("Hello"); // 以初始字符串初始化
StringBuilder sb3 = new StringBuilder(100); // 预分配容量
StringBuilder():创建一个默认大小的 StringBuilder。StringBuilder(string value):用字符串初始化 StringBuilder。StringBuilder(int capacity):设置初始容量,减少扩容开销。csharpsb.Append("Hello");
sb.Append(" World");
Console.WriteLine(sb.ToString()); // 输出: Hello World
Append(string):在末尾追加字符串。AppendLine(string):追加字符串,并换行。csharpsb.Insert(5, " C#"); // 在索引 5 处插入 " C#"
Console.WriteLine(sb.ToString()); // 输出: Hello C# World
Insert(int index, string value):在指定索引位置插入字符串。csharpsb.Replace("World", "CSharp");
Console.WriteLine(sb.ToString()); // 输出: Hello CSharp
Replace(oldValue, newValue):替换指定的子字符串。csharpsb.Remove(5, 3); // 从索引 5 开始删除 3 个字符
Console.WriteLine(sb.ToString()); // 输出: HelloSharp
Remove(int startIndex, int length):删除指定范围的字符。StringBuilder vs string| 特性 | string | StringBuilder |
|---|---|---|
| 是否可变 | ❌ 不可变 | ✅ 可变 |
| 内存开销 | 大(每次修改创建新对象) | 小(原地修改,不创建新对象) |
| 适用场景 | 少量拼接、字符串内容较少 | 需要大量拼接、修改的场景 |
| 性能 | 低(每次修改重新分配内存) | 高(减少内存分配,提高效率) |
本文作者:xuxuxuJS
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!