Как сказал Бруно, речь идет о неизменности. Речь идет не только о строках, но и о любых обертках, например. Double, Integer, Character и т. д. На это есть множество причин:
- Безопасность потока
- Безопасность
- Куча, которой управляет сама Java (в отличие от обычной кучи, которая собирается мусором другим способом)
- Управление памятью
В основном это делается для того, чтобы вы, как программист, могли быть уверены, что ваша строка никогда не будет изменена. Это также, если вы знаете, как это работает, может улучшить управление памятью. Попробуйте создать две одинаковые строки друг за другом, например "hello". Вы заметите, если вы отлаживаете, что у них идентичные идентификаторы, это означает, что это ОДИНАКОВЫЕ объекты. Это связано с тем, что Java позволяет вам это делать. Это было бы невозможно, если бы строки были изменяемыми. Они могут иметь то же, что и я, и т. д., потому что они никогда не изменятся. Итак, если вы когда-нибудь решите создать 1 000 000 строк «hello», то на самом деле вы создадите 1 000 000 указателей на «hello». Кроме того, использование любой функции в строке или любых оболочек по этой причине приведет к созданию другого объекта (снова посмотрите на идентификатор объекта - он изменится).
Кроме того, final в Java не обязательно означает, что объект не может изменяться (это отличается, например, от C++). Это означает, что адрес, на который он указывает, не может измениться, но вы можете изменить его свойства и/или атрибуты. Поэтому понимание разницы между неизменяемостью и окончательным в некоторых случаях может быть действительно важным.
HTH
Использованная литература:
person
Artur
schedule
15.01.2010