#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.
Комментариев нет:
Отправить комментарий