В Java, когда объект не имеет никакой живой ссылки, это имеет право на сборку "мусора". Теперь в случае строки, дело обстоит не так потому что строка войдет в строковый пул и JVM, поддержит объект для resuse. Таким образом, это означает, что строка, однажды созданная, никогда не будет собираться "мусор"?
Строковые объекты, которые находятся в строковом пуле, не будут собраны "мусор". Другие Строковые объекты будут собраны "мусор", если у Вас не будет ссылки на него в Вашем выполнении программы.
можно спросить, какие строковые объекты идет для строкового представления пула. Объекты в строковом пуле также:
литералы Времени компиляции (например, String s1 = "123";
)
Интернированные Строковые объекты во времени выполнения (например, String s2 = new String("test").intern();
)
И s1
и s2
ссылаются на строковый объект в строковом пуле.
Любые объекты, которые создаются во время выполнения и не интернируются, будут действовать как обычный объект и находиться в памяти "кучи". Эти объекты могут быть собраны "мусор".
пример этого был бы: String s3 = s1 + s2;
Здесь, s3
ссылки строковый объект, который находится в памяти "кучи" вместе с другими объектами (не в Строковом пуле).