软件构造--immutability mutability的区别简述

最后阶段还是对可变性这里不是很理解,在这总结一下:

Immutability 不变性,是key design principle
不变数据类型:一旦被创建,其值就不能被改变
String是典型的不变类型,每次改变的时候实际上都是new了一个新的String。
对比之下,StringBuilder是字符串的可变类,修改的时候不会创建新的变量。

对于所有的数据类型来说,常见的不变类包括全部的基础类型和他们的包装类(Integer等),以及String和BigInteger这样的对象类。其余的Object类都是可变的。对于像set,list等容器来说,由于他们有add,remove这样的mutator函数,它们在创建之后都是可以被改变的,所以他们都是可变的。若想把他们变成不可变的可以借用collaction里的wrapper把他们变成undefinedset等,程序就会使你的set、list无法再执行mutator,也就是不可变。在这种情况下如果我们还调用mutator的话会在动态检查中被发现并抛出异常。
所有的不变类都是没有mutator的。

同样我们除了数据类型的不变性,还有引用的不变性。数据类型的不变性指一个数据被创建出来之后便不能被改变,而引用的不变性则指当一个变量引用另一个变量之后,这个变量不可以再引用别的变量,即x=y后不能执行x=z。要想实现引用的不变性需要我们用final去修饰变量。

原文地址:https://www.cnblogs.com/lllllllm/p/14983929.html