对于内存,不可变v。可变数组如何工作?

时间:2014-07-06 02:49:18

标签: arrays immutability mutability

具体来说,为什么语言中的所有数组都不可变 - 语言会有或不具备这些数据的原因(优点和缺点)?

1 个答案:

答案 0 :(得分:1)

在幕后,内存中的每个字节都是“可变的”。一个数组(比方说,Objective-C)是不可变的,因为它中的某种标志或类型指示符表明它是不可改变的。

使对象具有不可变性基本上有三个原因:

  1. 安全性/健壮性 - 对象可以在两侧放心地传递给接口,不会动态修改对象。传递对象后的修改可以例如允许baddie在参数有效性检查后更改参数。
  2. 易于实现 - 构建具有固定结构和内容的对象可能比可修改的对象更容易。
  3. 并发 - 如果可以动态修改对象,则有必要考虑在两个线程中进行并发修改的情况下发生的情况,或者在另一个线程中进行修改时在另一个线程中进行修改时发生的情况。这种并发修改可能导致程序故障或导致对象本身表现不正常。