string
在 C# 中本质是 引用类型,但由于其 不可变性(Immutable),它表现出类似 值类型 的行为。
string
一旦创建就无法修改,每次修改都会生成新的 string
对象,分配新的内存空间string
的对象实例都存储在堆内存而不是在栈内存上。string
直接比较 内容,而非对象引用。==
和 Equals()
方法都基于字符串内容进行比较。StringBuilder
是 C# 提供的一个用于处理字符串的公共类,本质上是内部维护的事一个字符数组char[]
,StringBuilder
允许在原有字符串的基础上修改内容,而不会创建新的对象,从而提高字符串拼接和修改的效率,特别适用于频繁变更字符串的场景。
使用前需要引用命名空间
using System.Text
StringBuilder
csharpusing 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 许可协议。转载请注明出处!