“...如果串联固定数量的String对象,则String类更适用于并置操作。在这种情况下,编译器甚至可以将单个串联操作合并为单个操作。
如果串联任意数量的字符串,则StringBuilder对象更适合并置操作...“
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
让我得到的是第一段中“甚至可能”的不确定词。不应该“肯定会”吗?因为没有将连接组合成一个操作,String的重复内存分配将使它完全不如StringBuilder。
答案 0 :(得分:2)
嗯,这也可能没有明显的区别。说实话,他们会因为琐碎的连接而荒谬地接近,但是:对于一次操作中“n”字符串的直接连接,Concat(aka +)将会闪耀;长度等可以有效地计算,然后只是复制。在循环中,StringBuilder将闪耀。
当您在一次操作中使用Concat 时:
string s = a + b + c + x + y + z;
确实如此:
string s = string.Concat(a, b, c, x, y, z);
仅 一个 额外字符串。
答案 1 :(得分:0)
它说如果可以在编译时确定字符串的长度,编译器会自动将它合并为更高效的表示。但是,如果在编译时无法计算长度,则应使用StringBuilder。
“甚至可能是”如果你只是连接两个长度不确定的字符串,那么使用String可能会更快。连接的字符串越多,StringBuilder的好处就越多。
答案 2 :(得分:0)
我的猜测是你可以用编译器不会将它组合成一个代码的方式编写代码。但是,如果你按照微软要求的方式编写代码,它应该在一次操作中完成。