Неизменяемые классы в целом гораздо проще в проектировании, внедрении и правильном использовании. Примером является String: реализация java.lang.String
значительно проще, чем реализация std::string
в C ++, в основном из-за ее неизменности.
Одна особая область, где неизменность делает особенно большую разницу, - это параллелизм: неизменный объекты могут безопасно распределяться между несколькими потоками, тогда как изменяемые объекты должны быть потокобезопасными посредством тщательного проектирования и реализации - обычно это далеко не тривиальная задача.
Обновление: Эффективное Java 2nd Edition решает эту проблему подробнее - см. Пункт 15: Минимизировать изменчивость .
См. также эти связанные сообщения: