10_C# 中的 String 和 StringBuilder 的区别

C# 中的 String 和 StringBuilder 的区别

1. String 类

  • String 类表示不可变的字符串。
  • 一旦创建 String 对象,其内容就不能再被修改。
  • 对 String 对象进行任何修改操作都会返回一个新的 String 对象。

示例:

string str1 = "Hello";
string str2 = str1 + " World!";

Console.WriteLine(str1); // 输出:Hello
Console.WriteLine(str2); // 输出:Hello World!

// str1 和 str2 是两个不同的对象
Console.WriteLine(str1 == str2); // 输出:False

2. StringBuilder 类

  • StringBuilder 类表示可变的字符串。
  • 可以直接对 StringBuilder 对象进行插入、删除、替换等操作。
  • StringBuilder 对象会在需要时自动扩展容量。

示例:

StringBuilder sb = new StringBuilder("Hello");
sb.Append(" World!");

Console.WriteLine(sb.ToString()); // 输出:Hello World!

// sb 是同一个对象
Console.WriteLine(sb.Capacity > sb.Length); // 输出:True

3. 两者的区别

区别 String 类 StringBuilder 类
可变性 不可变 可变
内存分配 每次修改都分配新的内存空间 仅在第一次分配内存空间
线程安全 线程安全 非线程安全
适用场景 少量修改和频繁读取 频繁修改

4. 总结

  • String 类适用于需要少量修改和频繁读取的场景,例如字符串的拼接、比较等。
  • StringBuilder 类适用于需要频繁修改字符串内容的场景,例如循环拼接大量字符串或动态生成字符串。

建议:

  • 在需要创建不可变字符串时,使用 String 类。
  • 在需要频繁修改字符串内容时,使用 StringBuilder 类。
  • 在多线程环境下使用 StringBuilder 类时,需要自行保证同步。
posted @ 2024-03-03 23:04  甜饼怪2030  阅读(144)  评论(0)    收藏  举报