4

为什么我要使用StringBuilder而不是简单地附加字符串?例如为什么像这样实现:

StringBuilder sb = new StringBuilder;
sb.Append("A string");
sb.Append("Another string");

超过

String first = "A string";
first += "Another string";

?

4

4 回答 4

10

StringBuilder的文档解释了它的用途:

String 对象是不可变的。每次使用 System.String 类中的一种方法时,都会在内存中创建一个新的字符串对象,这需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新 String 对象相关的开销可能会很昂贵。当您想要修改字符串而不创建新对象时,可以使用 System.Text.StringBuilder 类。例如,在一个循环中将多个字符串连接在一起时,使用 StringBuilder 类可以提高性能。

于 2011-03-31T11:11:42.117 回答
5

在像你这样的简单情况下,这真的没关系。但一般来说,字符串是不可变的,这意味着对字符串变量的每次更改都会在内存中创建一个新缓冲区,复制新数据并放弃旧缓冲区。如果您正在执行大量字符串操作,这会减慢您的程序并导致大量废弃的字符串缓冲区,这些缓冲区需要由垃圾收集器收集。

于 2011-03-31T11:11:29.347 回答
0

基本上是字符串不变性问题。它还提供了更简单的字符串操作方法。看看使用 Stringbuilder 类

于 2011-03-31T11:11:45.070 回答
0

StringBuilder is mutable. Strings are not. So any operation on a string creates a new object. In your 2nd sample, 2 objects are created (one on each line). Whereas in the first, only one object is created.

于 2011-03-31T11:12:52.630 回答