使用 StringBuilder 有哪些缺点?

发布于 2024-11-17 09:49:58 字数 272 浏览 1 评论 0原文

我知道在处理大量修改字符串值的代码时,StringBuilder 比普通字符串更有效,因为虽然字符串的行为类似于值类型,但它们实际上是引用,这使得它们不可变,因此每次更改它时,我们都需要创建一个内存中的新参考。

我的问题是,为什么 .NET 默认情况下不使用 stringBuilder?与仅使用 String 相比,它肯定有一些缺点。谁能告诉我它们是什么?

我唯一能想到的可能是它是一个较重的对象,并且需要更多时间来实例化,因此如果您不改变太多字符串,这将覆盖 StringBuilder 的好处

I know that StringBuilder is more efficient than a normal string when processing code which modifies the string value a lot because although strings act like value types, they are actually reference, which makes them immutable so every time we change it, we need to create a new reference in memory.

My question is that, why doesn't .NET just use stringBuilder by default? There must be some disadvantages of it over just using String. Can anyone tell me what they are?

The only thing I can think of is perhaps it is a heavier object and it takes more time to instantiate so if you aren't changing the string too much, this would override the benefits of StringBuilder

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌梦深 2024-11-24 09:49:58

字符串被设置为不可变,以便以线程安全的方式进行操作。因为 StringBuilder 是可变的,所以它不是线程安全的。此外,您可以通过复制对字符串的引用来创建字符串的“副本”,而不是创建一个全新的对象。可变对象可以通过其任何引用进行更改,这使得这很危险。

Strings are made immutable in order to be manipulated in a thread safe way. Because StringBuilder is mutable it is not thread safe. In addition you can make "copies" of a string by copying the references to the string rather than making a whole new object. Mutable objects can be changed via any of their references making this dangerous.

ら栖息 2024-11-24 09:49:58

也许只是一个不太好的模式(必须创建另一个对象然后使用toString()方法来实际获取String)。另请注意,由于 String+ 运算符很特殊,编译器可以在内部优化字符串副本,因此在 .NET 中可能没有实际开销。

Maybe just a not so nice pattern (having to create another object and then using the toString() method to actually get the String). Note also that as the + operator for Strings is special, the compiler can internally optimize the string copies, so maybe in .NET there is no practical overhead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文