The presence of this annotation indicates that the author believes the class to be immutable and hence inherently
thread-safe. An immutable class is one where the state of an instance cannot be
seen to change. As a result
- All public fields must be
final
- All public final reference fields are either
null
or refer to other immutable objects
- Constructors and methods do not publish references to any potentially mutable internal state.
Performance optimization may mean that instances of an immutable class may have mutable internal state. The
critical point is that callers cannot tell the difference. For example
String
is an immutable class, despite
having an internal int that is non-final but used as a cache for
String.hashCode()
.
Immutable objects are inherently thread-safe; they may be passed between threads or published without
synchronization.