Java不可变类与final类
概念
Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的。使用加法等操作时,其实是创建了一个新的对象。
Java的final类是对类用关键字final进行修饰,说明该类是不可被继承的。
关联
不可变类为了保证其不可变性,通常实现上有以下几种规则:
- 成员变量是private final的,get返回对象成员变量的副本
- 初始化(使用构造函数)成员变量时,使用副本。不提供set函数。
- 方法或者类为final,防止子类修改其成员变量。
由于不可变类的成员变量不变,所以计算hashcode可以对其进行缓存。String就是这样实现的(源码中Integer倒是没有)。
总体来说,他们没有直接关联。final类不一定是不可变类,不可变类也不一定是final类。
Math和StringBuffer是final类。不是不可变类。
String、Integer等既是final也是不可变类。