Неизменяемый класс — это класс, внутреннее состояние которого нельзя изменить. Язык Java содержит множество неизменяемых классов, таких как String, упакованные примитивные классы, BigInteger и BigDecimal.

1. Неизменяемые объекты — это просто

Неизменяемый объект может находиться ровно в одном состоянии, в котором он был создан. Если вы гарантируете, что все конструкторы устанавливают инварианты класса, эти инварианты всегда будут истинными. С другой стороны, изменяемые объекты могут иметь произвольно сложные пространства состояний. Если в документации нет точного описания переходов между состояниями, может быть сложно или невозможно надежно рассуждать об изменяемом классе.

2. Неизменяемые объекты — отличные строительные блоки

Инвариант сложного объекта гораздо проще поддерживать, если вы знаете, что его составные объекты неизменяемы. Таким образом, неизменяемые объекты являются отличными ключами карты и элементами набора, вам не нужно беспокоиться об изменении их значений, когда они находятся на карте или наборе, что разрушило бы инварианты карты или набора.

3. Неизменяемые объекты потокобезопасны

Неизменяемые объекты не могут быть повреждены несколькими потоками, обращающимися к ним одновременно. Это самый простой подход к обеспечению потокобезопасности. Поскольку ни один поток не может наблюдать какое-либо влияние другого потока на неизменяемый объект, неизменяемые объекты могут свободно совместно использоваться.