1.不可变性
不变性是Java中重要的设计原则,不变的数据类型一旦被创建,其值不能改变;同时如果是引用类型,也可以用关键字final标记以使它成为不可变的,一旦确定其指向的对象,就不能再被改变指向其他对象,编译器在进行静态类型检查时,如果判断final的变量首次赋值后发生了改变,会提示错误,所以要尽量使用final变量作为方法的输入参数,作为局部变量。
注:final类无法派生出子类 final变量无法改变其值/引用 final方法无法被子类重写
2.可变性
使用不可变类型,对其频繁修改会产生大量的临时拷贝,需要很多垃圾回收,而使用可变类型最少化拷贝以提高效率;同时使用可变数据类型,可以获得更好的程序性能,也更适合在多个模块之间共享数据。
3.二者对比
不变对象:一旦被创建,始终指向同一个值或引用
可变对象:拥有方法可以修改自己的值或引用
不可变类型更安全,在其他质量目标方面表现得更好
可变性使得难以理解程序正在做什么,更难满足方法的规约