如果某个对象在被创建后其状态就不能被修改,那么这个对象就称为不可变对象
不可变对象一定是线程安全的;
不可变性并不等于将对象中的所有域都声明为final类型,即使对象中的所有域都是final类型的,这个对象也仍然是可变的,因为在final类型的域中可以保存对可变对象的引用;
不可变对象
当满足以下条件时,对象才是不可变的:
- 对象创建以后其状态就不能改变;
- 对象的所有域都是final类型;
- 对象是正确创建的(在对象的创建期间this引用没有逸出);
事实不可变对象
如果对象从技术上来看是可变的,但其状态在发布后不会改变,那么把这种对象称为“事实不可变对象”