哪个字符串比StringBuilder更有用?

DJa*_*Jay 5 c# string stringbuilder heuristics

已经有很多关于字符串和字符串构建器之间差异的问题,大多数人都认为字符串构建器比字符串更快.我很想知道字符串构建器是否太好所以为什么字符串存在?此外,有些正文可以给我一个例子,其中字符串比字符串构建器更有用吗?

Jan*_*net 11

正如其名称所示,StringBuilder用于构建字符串,而字符串是不可变的字符值.如果要传递字符数据,请使用字符串;如果要操作字符数据,请使用StringBuilder.


KP.*_*KP. 7

在通过大量循环或迭代构造和修改字符串时,StringBuilder是更好的选择.

简单的字符串操作(例如一些连接或简单地存储字符串值)更适合标准字符串对象.

类似的问题?String vs. StringBuilder


Dav*_*ale 3

这不是哪种情况更有用......

AString是 a String- 一个或多个彼此相邻的字符。如果您想以某种方式更改字符串,它只会创建更多字符串,因为它们是不可变的

AStringBuilder是创建字符串的类。它提供了一种构造它们的方法,而无需在内存中创建大量冗余字符串。最终的结果永远是一个String

不要这样做

string s = "my string";
s += " is now a little longer";
Run Code Online (Sandbox Code Playgroud)

或者

s = s + " is now longer again";
Run Code Online (Sandbox Code Playgroud)

这将在内存中创建5 个字符串(实际上,见下文)。

做这个:

StringBuilder sb = new StringBuilder();
sb.Append("my string");
sb.Append(" is now a little longer");
sb.Append(" is now longer again");
string s = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

这将在内存中创建1 个字符串(再次参见下文)。

你可以这样做:

string s = "It is now " + DateTime.Now + ".";
Run Code Online (Sandbox Code Playgroud)

这只会在内存中创建1 个字符串。

顺便说一句,创建 aStringBuilder确实需要一定量的内存。作为一个粗略的经验法则:

  • StringBuilder如果要在循环中连接字符串,请始终使用 a 。
  • StringBuilder如果连接字符串超过 4 次,请使用 a 。