不可变类:实例不能被修改的类。
每个实例中包含的所有信息都必须在创建该实例时提供,且在对象的整个生命周期内固定不变。
不可变类,如:String、基本类型的爆装备、BigInteger和BigDecimal。
为了使类成为不可变,要遵循以下五条原则:
- 不要提供任何会修改对象状态的方法(set方法)。
- 保证不会被扩展。(防止子类化,可使用fianl修饰类)
- 声明所有的域都是final的。
- 声明所有的域都为私有的。
- 确保对任何可变组件的互斥访问。
不可变类的优点:
- 不可变对象简单,只有在创建时的一种状态。
- 不可变对象创建后无需考虑额外的维护工作。
- 不可变对象本质上是线程安全的,他们不要求同步。
- 不可变对象可以被自由的共享其本身和内部信息。
因不可变对象的这些特性,对于频繁用到的值,尽可能的重复使用现有实例。