主要区别是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是可变的,因此更改了它的值这一简单事实。