Что происходит с объектами LOST String - PullRequest
6 голосов
/ 16 августа 2011
Line 1: String x = "Java";
Line 2: x.concat(" Rules!");
Line 3: System.out.println("x = " + x);

Вывод: "x = Java"

Строка 1: создает новый объект String, присваивает значение "Java" и ссылается на него x.

Строка 2:VM создает 2-й объект String со значением «Java Rules!»но ничто не относится к этому.2-й СТРОКОВЫЙ ОБЪЕКТ МГНОВЕННО УТРАТАН;ВЫ НЕ МОЖЕТЕ ПОЛУЧИТЬ ЭТО.

Поскольку эти строковые объекты создаются в куче, будет ли второй объект собран мусором.

Ответы [ 3 ]

7 голосов
/ 16 августа 2011

Енош, в Java Строки неизменяемы, поэтому вам следует присвоить

x = x.concat(" Rules");

для второй строки, и тогда это будет работать.

Второй объект будет в конечном итоге GC, потому что больше нет сущности, ссылающейся на него.

5 голосов
/ 16 августа 2011

Абсолютно. В этом весь смысл сбора мусора.

0 голосов
/ 16 августа 2011

Согласитесь со всеми остальными, что он собирает мусор.Но я догадываюсь, что компилятор может вообще удалить это во время компиляции, поскольку методы concat влияют только на локальные поля метода, и поэтому весь оператор не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...