为什么字符串在许多编程语言中是不可变的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (76)

有几种语言选择了这种语言,例如C#,Java和Python。如果要为比较等操作节省内存或提高效率,它对连接和其他修改操作有什么影响?

提问于
用户回答回答于

不可变类型通常是一件好事:

  • 它们更适合于并发性(不需要锁定无法更改的内容!)
  • 它们减少了错误:可变对象容易被改变,当你不期望它会引入各种奇怪的错误时(“远处行动”)
  • 它们可以安全地共享(即对同一对象的多个引用),这可以减少内存消耗并提高缓存利用率。
  • 如果您必须采取可变对象的防御副本,共享也会使复制一个非常便宜的O(1)操作。这是一件大事,因为复制是一个非常常见的操作(例如,当你想要传递参数....)

因此,使字符串不可变是一种非常合理的语言设计选择。

总体而言,不变性的优势远大于轻微的缺点。即使你只对性能感兴趣,复制的并发优势和便宜性通常会使不可变的字符串比具有锁定和防御性复制的可变字符串更具性能。

用户回答回答于

它主要是为了防止编程错误。例如,字符串经常用作散列表中的键。如果他们可以改变,哈希表将被破坏。这只是一个例子,当你使用数据时会导致一些数据的变化导致问题。安全性是另一个方面:如果在执行所请求的操作之前检查用户是否被允许在给定路径上访问文件,那么包含路径的字符串最好不要变为可变的...

扫码关注云+社区

领取腾讯云代金券