String是不可变的有什么好处?

Ala*_*lan 20 string immutability

一旦我研究了字符串不可变的优点,因为有些东西可以改善内存中的性能.

任何人都可以向我解释一下吗?我在互联网上找不到它.

LBu*_*kin 34

不变性(对于琴弦或其他类型)可以有许多优点:

  • 它使得更容易推理代码,因为您可以对变量和参数进行假设,否则您无法做出.
  • 它简化了多线程编程,因为从无法更改的类型中读取始终是安全的并发执行.
  • 它允许通过允许将相同的值组合在一起并从多个位置引用来减少内存使用量.Java和C#都执行字符串实习以减少嵌入代码中的文字字符串的内存成本.
  • 它简化了某些算法(例如采用回溯或值空间划分的算法)的设计和实现,因为以前计算的状态可以在以后重用.
  • 不可变性是许多函数式编程语言的基本原则 - 它允许将代码视为从一个表示到另一个表示的一系列转换,而不是一系列突变.

不可变字符串也有助于避免使用字符串作为缓冲区的诱惑.C/C++程序中的许多缺陷与使用裸字符数组组成或修改字符串值导致的缓冲区溢出问题有关.将字符串视为可变类型可以鼓励使用更适合缓冲区操作的类型(请参阅StringBuilder.NET或Java).


And*_*mas 9

考虑替代方案.Java没有const限定符.如果String对象是可变的,那么将引用传递给字符串的任何方法都可能具有修改字符串的副作用.不可变的字符串消除了对防御性副本的需要,并降低了程序错误的风险.


Mar*_*som 5

不可变的字符串复制起来很便宜,因为您不需要复制所有数据 - 只需复制引用或指向数据的指针即可.

任何类型的不可变类在多个线程中更容易使用,所需的唯一同步是销毁.