C# 中 System.String 和 System.Text.StringBuilder 类哪个更好?

csharpserver side programmingprogramming更新于 2025/10/2 12:07:17

主要区别在于 StringBuilder 是可变的,而 String 是不可变的。

String 是不可变的,不可变意味着如果创建了字符串对象,就无法修改它,它总是在内存中创建一个新的字符串类型的对象。

另一方面,StringBuilder 是可变的。这意味着,如果我们创建一个字符串构建器对象,那么我们可以执行任何操作,例如插入、替换或追加,而无需每次都创建新的实例。它会在内存中的一个位置更新字符串,而不会在内存中创建新的空间。

示例

using System;
using System.Text;
class DemoApplication{
   public static void Main(String[] args){
      String systemString = "Hello";
      StringConcat(systemString);
      Console.WriteLine("String 类结果:" + systemString);
      StringBuilder stringBuilderString = new StringBuilder("Hello");
      StringBuilderConcat(stringBuilderString);
      Console.WriteLine("StringBuilder 类结果:" + stringBuilderString);
   }
    public static void StringConcat(String systemString){
      String appendString = " World";
      systemString = String.Concat(systemString, appendString);
   }
   public static void StringBuilderConcat(StringBuilder stringBuilderString){
      stringBuilderString.Append(" World");
   }
}

输出

上述示例的输出如下 −

String 类结果:Hello
StringBuilder 类结果:Hello World
  • StringConcat 方法的使用:在此方法中,我们传递一个字符串"Hello"并执行"systemString = String.Concat(systemString, appendString);",其中 appendString 是要连接的"World"。从 Main() 传递的字符串不会改变,这是因为 String 是不可变的。更改字符串的值会创建另一个对象,并且 StringConcat() 中的 systemString 存储新字符串的引用。但是 Main() 和 StringConcat() 中的 systemString 引用指向不同的字符串。

  • StringBuilderConcat 方法的使用:在此方法中,我们传递一个字符串"Hello",并执行"stringBuilderString.Append(“ World”);",这会将字符串(在 Main 中)的实际值更改为"Hello World"。这是因为StringBuilder 是可变的,因此其值会改变。


相关文章