主要区别是StringBuilder是Mutable,而String是Immutable。
字符串是不可变的,不可变是指如果您创建字符串对象,则无法对其进行修改,并且它总是在内存中创建字符串类型的新对象。
另一方面,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是要串联的“世界”。传递的字符串Main()未更改,这是由于String是不可变的。更改字符串的值会在StringConcat() 存储的新字符串引用中创建另一个对象和systemString 。但是引用systemString inMain()和StringConcat()引用不同的字符串。
使用StringBuilderConcat方法:在此方法中,我们传递字符串“ Hello”并执行“ stringBuilderString.Append(“ World”);” 它将字符串的实际值(在Main中)更改为“ Hello World”。这是由于StringBuilder是可变的,因此更改了它的值这一简单事实。