Однажды я узнал о преимуществе неизменяемости строки из-за чего-то, что улучшает производительность в памяти.
Кто-нибудь может мне это объяснить? Я не могу найти его в Интернете.
Неизменяемость (для строк или других типов) может иметь множество преимуществ:
Неизменяемые строки также помогают избежать соблазна использовать строки в качестве буферов. Многие дефекты в программах на C / C ++ связаны с проблемами переполнения буфера, возникающими в результате использования массивов незащищенных символов для составления или изменения строковых значений. Рассмотрение строк как изменяемых типов поощряет использование типов, более подходящих для работы с буфером (см. StringBuilder
в .NET или Java).
Рассмотрим альтернативу. В Java нет квалификатора const. Если бы объекты String были изменяемыми, то любой метод, которому вы передаете ссылку на строку, мог бы иметь побочный эффект изменения строки. Неизменяемые строки устраняют необходимость в защитных копиях и снижают риск ошибки программы.
Неизменяемые строки копировать дешево, потому что вам не нужно копировать все данные - просто скопируйте ссылку или указатель на данные.
С неизменяемыми классами любого типа легче работать в нескольких потоках, единственная необходимая синхронизация - это их уничтожение.