if("Привет" == "Привет"){
// какой-то код;
}
Подскажите, как хранятся в памяти данные строки? Также как и обычные, в Стринг пул? Если они лежат в Пуле, то можно ли получить на них ссылку и присвоить их?
Как они живут в памяти с точки зрения сборщика мусора?
И еще вопрос второй "Привет" создается как уникальный объект, через new, или ему присваивается ссылка от первого Привета который уже лежит в Пуле?
Anonymous #3073846
33 уровень
Как добавляются в память и живут строки в выражении if("Привет" == "Привет"){}
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
ГоффMaster
5 декабря 2022, 12:38решение
1. Да, созданные таким образом строки попадают в пул. Если строка создаётся как объект через new String(), то такая строка в пул не попадает.
2. Ссылка одна и её легко можно получить String string = "Привет"; - в переменной string будет ссылка на строку "Привет" в пуле.
3. В данном случае в пуле будет создана строка "Привет", потом при создании второй машина увидит, что такая строка уже есть, новой поэтому создавать не будет, сравнит ссылки на одну и ту же строку и вернёт true, так как ссылки одинаковые. После этого, так как ничто больше на эту строку в пуле не ссылается, строка будет подобрана мусорщиком.
Что бы она осталась в пуле, необходимо хотя бы в одну переменную закинуть на неё ссылку, например вот так:
+2
Anonymous #3073846
5 декабря 2022, 13:03
Спасибо, от души!
+1
KIRAРазработчик в prosv.ruExpert
5 декабря 2022, 13:58полезный
Руководство по String pool в Java
+1