【问题标题】:String concatenation : += operator versus string array joined字符串连接:+= 运算符与加入的字符串数组
【发布时间】:2017-02-04 01:21:26
【问题描述】:

在许多语言中使用+= 运算符的连接创建一个新的字符串实例。最好使用我们最后加入的string[]

在 Javascript 中:

var myString = new Array("Hello");
myString.push(" ");
myString.push("world !");
console.log(myString.join(''));

效率更高:

var myString = "Hello";
myString += " ";
myString += "world !";
console.log(myString);

在 C# 中,+= 运算符是否创建一个新字符串? StringBuilder 是否比使用 string[] 更有效?

【问题讨论】:

  • 这种问题最好用现实世界的例子和基准来回答,而不是纯粹的理论考试。您能否提供您希望看到基准测试的示例?
  • 请注意,a += ba = a + b 会被 C# 编译器转换为 a = string.Concat(a, b)
  • 它们有两种不同的用途。 StringBuilder 用于直接连接任意数量的字符串,无论是否在集合中 - string.Join 用于使用分隔符连接字符串(来自集合)。如果您想使用Join 连接带有空分隔符的字符串,没有什么可以阻止您,但这不是预期的目的。

标签: c# string-concatenation


【解决方案1】:

在 C# 中,+= 运算符会创建一个新字符串吗?

String 在 C# 和 Java 中是不可变的。这意味着你不能修改它。每个修改字符串的方法(+= 也执行一个方法)返回一个 string 的新实例。

StringBuilder 是否比在string[] 上使用.Join() 更有效?

StringBuilder 比在string[] 上使用.Join 性能更高(每次调用几纳秒)。 因此,当您经常在循环或其他方式中执行此操作时,它确实会产生“意义”。

【讨论】:

  • 第二个问题是使用StringBuilder而不是在字符串数组上调用Join
  • 感谢您的解释。编辑我的答案
  • "StringBuilder 比在字符串上使用 .Join[] 性能更高(每次调用需要几纳秒)"你怎么知道的?
  • @stuartd 问题是加入多个字符串[]。不使用 string.Join。至少我是这么认为的
猜你喜欢
  • 2016-07-19
  • 2010-09-08
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 2011-11-09
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多