在串联或字符串构建期间使用 StringBuilder 而不是 String 的好处



这是我正在研究的 C# 中的字符串反转方法:

string s = "This is the way it is.";
string result = string.Empty;   
for(int i = s.Length-1; i <= 0; i--)
{   
result = result + s[i];  
}    
return result; 

假设字符串可以变得非常长。为什么在这种情况下使用Stringbuilder比使用s[i]连接结果更有益,如上所示?

是因为 result 和s[i]都是不可变的字符串,因此每次查找它们时都会创建一个对象吗?导致创建大量对象并需要对所有这些对象进行垃圾回收?

提前感谢您的时间。

NO.不是他们两个。在这种情况下,这两个字符串都是不可变的。但是,在 for 循环中查找,创建了一个新的resultString 对象,但没有创建s字符串对象,因为它没有更新,我们只是在访问它。赋值后,我们立即使前一个result对象难以辨认以进行垃圾回收,因为它丢失了引用s而不是字符串对象。在下一次迭代中,当前新的resultString 对象将被垃圾回收,依此类推。如果使用字符串生成器,则会遇到不同的情况。

result = result + s[i];

与字符串不同,字符串生成器是可变的。 因此,如果您的result变量类型为 Stringbuilder,则不会创建新的result对象,而是会根据赋值更新现有对象。

StringBuilder 是可变的。这意味着它在修改时不会创建新对象。 您可以在此页面阅读更多内容

最新更新