告诉我这个代码C#有什么问题。
string str = string.Empty;
for (var i = 1; i <= 1000; i++)
str += i.ToString();
这是面试问题。
答案 0 :(得分:5)
实际上您的代码没有问题。
在这种情况下,StringBuilder
比string
更合适。
因为StringBuilder
是可变的,而string
是immutable
。
因此,每当使用+=
修改String对象时,它都会创建一个新的string
对象,因此在循环结束时会创建许多字符串对象。
但如果您使用StringBuilder
:每次附加Strings
时,都会修改相同的对象。
您可以从MSDN找到更多信息:StringBuilder Class
String对象是不可变的。每次使用其中一种方法 在System.String类中,您在内存中创建一个新的字符串对象, 这需要为该新对象重新分配空间。在 您需要对a执行重复修改的情况 string,与创建新String对象相关的开销可以 很贵。您可以使用System.Text.StringBuilder类 想要在不创建新对象的情况下修改字符串。例如, 使用StringBuilder类可以在连接时提高性能 许多字符串在一个循环中。
解决方案:
这个
string str = string.Empty;
for (var i = 1; i <= 1000; i++)
str += i.ToString();
应该这个
StringBuilder str =new StringBuilder();
for (var i = 1; i <= 1000; i++)
str.Append(i.ToString());
答案 1 :(得分:1)
答案为here。
the compiler can't do anything if you concatenate in a loop and this does generate a lot of garbage.