Существуют разные возможные определения неизменности.
Упомянутое вами определение не допускает каких-либо изменений состояния объекта.В частности, после того, как он был создан, он не может изменять свое собственное состояние.
Однако иногда неизменный объект определяется как объект, состояние которого нельзя наблюдать для изменения.Когда неизменность определяется таким образом, состояние неизменяемого объекта может изменяться, если это изменение состояния не может наблюдаться извне.Например, результаты дорогостоящих вычислений могут быть кэшированы, или может быть записана некоторая внутренняя статистическая информация, или что-то в этом роде.
Одним из преимуществ неизменяемых объектов, которое часто указывается, является то, что они автоматически поточно-ориентированы.Важно отметить, что это преимущество сохраняется только тогда, когда вы определяете неизменность строго (первый вариант выше).Если к объекту, который только изменяет свое ненаблюдаемое состояние, одновременно обращаются два потока, он в принципе все равно может давать ошибочные результаты, поэтому программист должен позаботиться о том, чтобы объект был потокобезопасным.