我知道Immutable对象比可变对象提供了几个优点,比起它们比可变对象更易于推理,它们没有随时间变化的复杂状态空间,我们可以自由地传递它们,它们可以制作安全的哈希表键等.所以我的问题是不可变对象的缺点是什么?
引自Effective Java:
不可变类的唯一真正缺点是它们需要为每个不同的值分别使用一个对象.创建这些对象可能成本很高,尤其是在它们很大的情况下.例如,假设您有一个百万位的BigInteger并且您想要更改其低位:
BigInteger moby = ...; moby = moby.flipBit(0);
flipBit方法创建一个新的
BigInteger
实例,也是一百万位长,只与一位不同.该操作需要时间和空间与大小成比例BigInteger
.对比这个java.util.BitSet
.类似BigInteger
,BitSet
表示任意长的位序列,但不同BigInteger
,BitSet
是可变的.本BitSet
类提供了一种方法,可以让你改变在常数时间内millionbit实例的单位的状态.
阅读第15项:最小化可变性的完整项目