В чем разница между этими 2. Изменение ссылок на объекты и удаление - PullRequest
0 голосов
/ 01 сентября 2018

Случай 1:

Object x = y
y = z
x = null

*, где y и z относятся к одному и тому же типу объекта.

Дело 2:

y = z

Я в основном хочу установить y в z и удалить y (установить в ноль). Случай 1 сделает это? Если да, то как это работает?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2018

В Java нет понятия явного удаления.

Объекты, на которые нет ссылок, указывающих на них, автоматически удаляются сборщиком мусора.

Поэтому y = z; будет достаточно, если объект, на который ранее указывал y, не имеет других ссылок, указывающих на него.

Случай 1 работает не так, как вы думаете, x = null; означает, что x не указывает ни на что, он явно не удаляет указанный объект.

Здесь наглядное представление:

cases

красным цветом, если объект не имеет других ссылок, поэтому будет удален сборщиком мусора.

0 голосов
/ 01 сентября 2018

В Java переменная определенного класса не является объектом самого этого класса, она просто может содержать ссылку на объект этого класса. Думайте об этом как о переменной, которая может знать адрес объекта, где этот объект «живет». Имея это в виду, взгляните на несколько примеров ниже:

Foo var;

В приведенном выше примере вы просто объявили переменную типа "Foo". Он не имеет ссылки на какой-либо объект. Попытка вызвать метод для него вызовет исключение нулевой точки.

var = new Foo();

Здесь вы говорите переменной var для хранения ссылки («адреса»), которая указывает на вновь созданный объект класса «Foo». Этот объект явно создается с помощью ключевого слова «новый». Теперь вы можете вызывать методы для нового объекта.

После понимания этого важно знать, что в Java нет способа явно удалить объект. сборщик мусора Java обрабатывает это для вас. Когда нет ссылок на объект (это означает, что никакие переменные не содержат копию «адреса» объекта), сборщик мусора автоматически удаляет его. Так что, в принципе, если вы хотите избавиться от объекта Просто убедитесь, что ни одна из ваших переменных не содержит ссылки на него. Вы можете сделать это, например, установив значение переменной null , как показано ниже:

var = null; //if no other variables hold a reference to the object created in the 2nd example, it will be deleted by the GC.

Ответ оказался довольно длинным. Я сам начинающий, и я люблю изучать эти вещи. Я надеюсь, что это может помочь вам, а также другим новичкам, как мы. Ура!

0 голосов
/ 01 сентября 2018

Первый параметр создает новую переменную x, которая в конечном итоге устанавливается равной нулю, и устанавливает y для того же объекта, что и z.

Второй параметр просто устанавливает y для того же объекта, что и z.

Ни одна из опций ничего не удаляет. Если вы хотите установить z на ноль, вам нужно z = null. Если вы хотите установить y на ноль, вам нужно y = null. Установка другой переменной равной null не влияет на другие переменные или объекты, на которые они ссылаются.

Если у объекта есть нет оставшихся переменных, ссылающихся на него, он может быть использован для сборки мусора.

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