1.mutable(可变)和immutable(不可变)类型的区别
可变类型的对象:提供了可以改变其内部数据值的操作,其内部的值可以被重新更改。
不可变数据类型:其内部的操作不会改变内部的值,一旦试图更改其内部值,将会构造一个新的对象而非对原来的值进行更改。
2.常见的immutable类String类型是immutable,一旦创建则不能更改其指向的数值,只可以修改其引用,而且基本类型及其封装对象类型都是不可变的,即byte、short、int、long、float、double、char、boolean与封装类:Boolean, Byte, Character, Short, Integer, Long, Float, Double
3.常见的mutable类
StringBuilder StringBuilder类型是mutable的,创建成功后,可以利用一些方法来改变它指向地址中的的内容StringBuffer,常见的Map如HashMap。Java 中的常见的大多数迭代器Iterator以及一些常见的Collection类,如Arraylist和linklist。
4.如何构造一个immutable类
1)确保fileds中的成员都被private final修饰:private保证内部成员不会被外部直接访问;final确保在成员被初始化之后不会被重新assigned。
2)不提供改变成员的方法,例如setX
3)使用final修饰自定义类,确保类中的所有方法不会被重写。
4)如果类中的某成员为mutable类型,那么在初始化该成员或者企图使用get方法从外部对其进行观察的时候,应该使用深度拷贝,确保类immutable。