Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Объект типа String все таки изменяемый?

#java


В учебнике Герберта Шилдта "Java Полное руководство", написано, что созданный объект
типа String неизменяем, а именно "после того, как объект типа String будет создан,
изменить символы, составляющие новую строку, уже нельзя".

Вот этот код добавит символ в конец строки:

String str = "world wide";
str += 'x';


Как я понимаю, выходит, что объект типа String изменяемый, но с определенными ограничениями,
такими как, например: нельзя заменить символ в середине, нельзя добавить символ в середину
и т.п. Правильно имеются какие либо ещё неточности в формулировках в учебниках?
    


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий