-1

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

4

1 回答 1

1

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

使对象不可变的原因基本上有 3 个:

  1. 安全性/鲁棒性——一个对象可以传递给一个接口,双方都确信该对象不会被动态修改。传递对象后的修改可以,例如,允许坏人在参数已被有效性检查后更改参数。
  2. 易于实现——构建具有固定结构和内容的对象可能比可以修改的对象更容易。
  3. 并发性——如果一个对象可以被动态修改,那么有必要考虑在两个线程中并发修改或在一个线程中修改而在另一个线程中访问时会发生什么。这种并发修改可能导致程序故障或导致对象本身行为不正确。
于 2014-07-06T03:00:51.340 回答