2023-04-02
编程语言
00

目录

String是特殊的引用类型
1. 不可变性(Immutable)
2. 值类型的相等性行为
StringBuilder
StringBuilder的基本用法
创建 StringBuilder
追加字符串
插入字符串
替换字符串
删除字符串
StringBuilder vs string

String是特殊的引用类型

string 在 C# 中本质是 引用类型,但由于其 不可变性(Immutable),它表现出类似 值类型 的行为。

1. 不可变性(Immutable)

  • string 一旦创建就无法修改,每次修改都会生成新的 string 对象,分配新的内存空间
  • 赋值不会影响原始字符串,而是创建新的实例。

2. 值类型的相等性行为

  • string的对象实例都存储在堆内存而不是在栈内存上。
  • string 直接比较 内容,而非对象引用。
  • ==Equals() 方法都基于字符串内容进行比较。

StringBuilder

StringBuilder是 C# 提供的一个用于处理字符串的公共类,本质上是内部维护的事一个字符数组char[]StringBuilder 允许在原有字符串的基础上修改内容,而不会创建新的对象,从而提高字符串拼接和修改的效率,特别适用于频繁变更字符串的场景。

StringBuilder的基本用法

使用前需要引用命名空间 using System.Text

创建 StringBuilder

csharp
using 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):设置初始容量,减少扩容开销。

追加字符串

csharp
sb.Append("Hello"); sb.Append(" World"); Console.WriteLine(sb.ToString()); // 输出: Hello World
  • Append(string):在末尾追加字符串。
  • AppendLine(string):追加字符串,并换行。

插入字符串

csharp
sb.Insert(5, " C#"); // 在索引 5 处插入 " C#" Console.WriteLine(sb.ToString()); // 输出: Hello C# World
  • Insert(int index, string value):在指定索引位置插入字符串。

替换字符串

csharp
sb.Replace("World", "CSharp"); Console.WriteLine(sb.ToString()); // 输出: Hello CSharp
  • Replace(oldValue, newValue):替换指定的子字符串。

删除字符串

csharp
sb.Remove(5, 3); // 从索引 5 开始删除 3 个字符 Console.WriteLine(sb.ToString()); // 输出: HelloSharp
  • Remove(int startIndex, int length):删除指定范围的字符。

StringBuilder vs string

特性stringStringBuilder
是否可变❌ 不可变✅ 可变
内存开销(每次修改创建新对象)(原地修改,不创建新对象)
适用场景少量拼接、字符串内容较少需要大量拼接、修改的场景
性能(每次修改重新分配内存)(减少内存分配,提高效率)

本文作者:xuxuxuJS

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!