В учебнике Герберта Шилдта "Java Полное руководство", написано, что созданный объект типа String неизменяем, а именно "после того, как объект типа String будет создан, изменить символы, составляющие новую строку, уже нельзя".
Вот этот код добавит символ в конец строки:
String str = "world wide";
str += 'x';
Как я понимаю, выходит, что объект типа String изменяемый, но с определенными ограничениями, такими как, например: нельзя заменить символ в середине, нельзя добавить символ в середину и т.п. Правильно имеются какие либо ещё неточности в формулировках в учебниках?
В примере, который вы показали - это не изменение объекта.
В этот момент str += 'x';
вы создаёте новую строку и пишете её в переменную str, но на изначальный str со значением "world wide"
ссылка была утеряна.
Безопасность и String pool основные причины неизменяемости String в Java.
Безопасность объекта неизменяемого класса String обусловлена такими фактами:
1) Вы можете передавать строку между потоками и не беспокоиться что она будет изменена
2) Нет проблем с синхронизацией (не нужно синхронизировать операции со String)
3) Отсутствие утечек памяти
4) В Java строки используются для передачи параметров для авторизации, открытия файлов и т.д. - неизменяемость позволяет избежать проблем с доступом
5) Возможность кэшировать hash code
String pool позволяет экономить память и не создавать новые объекты для каждой повторяющийся строки. В случае с изменяемыми строками - изменение одной приводило бы к изменению всех строк одинакового содержания.
Если нужно изменять, есть StringBuffer.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Работаю над андроид игрушкой и вылазит ошибка
Есть массив со словами, как вывести слова в массиве по алфавиту и посчитать сколько одинаковых слов, например: