[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-core-pochemu-string-neizmenyaemyy-i-finalizirovannyy-klass":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},66,"pochemu-string-neizmenyaemyy-i-finalizirovannyy-klass",2,"java-core","Java Core","☕","Почему `String` неизменяемый и финализированный класс?","Есть несколько преимуществ в неизменности строк:\n\n+ Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.\n+ Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.\n+ Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.\n+ Строки используются classloader и неизменность обеспечивает правильность загрузки класса.\n+ Поскольку строка неизменяемая, её `hashCode()` кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в `HashMap` т.к. его обработка происходит быстрее.","","middle",[15,16,17],"core","immutable","string",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":32,"featuredSnippetReady":33},"Почему String неизменяемый и final класс в Java — Gymterview","Почему класс String в Java является immutable и final: пул строк, безопасность, потокобезопасность, кэширование hashCode, загрузка классов.","Неизменяемость String обеспечивает работу пула строк, безопасность, потокобезопасность и кэширование hashCode.",[25,16,26,27,28,29,30,31],"String","final","неизменяемый","Java","потокобезопасность","пул строк","hashCode","Неизменяемость String обеспечивает: работу пула строк (интернирование невозможно с изменяемыми строками), безопасность (нельзя подменить значение пароля или URL), потокобезопасность без синхронизации, корректную загрузку классов через classloader, кэширование hashCode при создании (эффективный ключ HashMap).",true]