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


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

String 是不可变的,不可变意味着如果您创建了一个字符串对象,则无法修改它,并且它始终会在内存中创建新的字符串类型对象。

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

示例

 实时演示

using System;
using System.Text;
class DemoApplication{
   public static void Main(String[] args){
      String systemString = "Hello";
      StringConcat(systemString);
      Console.WriteLine("String Class Result: " + systemString);
      StringBuilder stringBuilderString = new StringBuilder("Hello");
      StringBuilderConcat(stringBuilderString);
      Console.WriteLine("StringBuilder Class Result: " + 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 Class Result: Hello
StringBuilder Class Result: 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 是可变的,因此会更改其值。**

更新于: 2020年8月4日

2K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.