我知道StringBuilder在处理修改字符串值的代码时比普通字符串更有效,因为虽然字符串就像值类型一样,但它们实际上是引用,这使得它们不可变,因此每次我们更改它时,我们都需要在内存中创建一个新的引用。
我的问题是,为什么.NET默认情况下不使用stringBuilder?仅仅使用String就必须有一些缺点。谁能告诉我它们是什么?
我唯一能想到的可能是它是一个较重的对象,它需要更多的时间来实例化,所以如果你没有过多地改变字符串,这将覆盖StringBuilder的好处
答案 0 :(得分:1)
字符串是不可变的,以便以线程安全的方式进行操作。因为StringBuilder是可变的,所以它不是线程安全的。此外,您可以通过复制对字符串的引用而不是创建一个全新的对象来制作字符串的“副本”。可变对象可以通过任何引用进行更改,从而使其变得危险。
答案 1 :(得分:0)
也许只是一个不太好的模式(必须使用toString()
方法创建另一个对象然后来实际获取String
)。另请注意,由于+
的{{1}}运算符很特殊,编译器可以在内部优化字符串副本,因此在.NET中可能没有实际的开销。