Java Array, содержащий ссылку на объект - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть объект e класса EMP.Я добавляю его в массив и делаю ссылку на e как ноль.

Emp e = new Emp();
Emp[] lst = new Emp[10];
lst[0] = e;
e = null; 
System.out.println("Emp object = "+l[0]);

Что я знаю, так это то, что массив lst не содержит фактический объект empolyee, но ссылается на объект сотрудника.Так что, если я сделаю ссылку e нулевой, тогда как мы сможем получить доступ к объекту, используя lst [0].

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018
Emp e = new Emp(); // e points to some object
ListEmp lst = new ListEmp[10];
lst[0] = e; // lst[0] points to some object which is the same object pointed to by e
e = null; // here you are making e to point to null but lst[0] is still pointing to the object that was previously pointed to by e 

Ни e , ни lst [0] не являются фактическими объектами.Это просто ссылки на один и тот же объект.Таким образом, создание нулевой ссылки не делает сам объект нулевым.Так что если есть какие-либо ссылки на объект, он все равно останется в памяти.

0 голосов
/ 10 декабря 2018

Ссылка - это просто число, которое JVM использует для идентификации и определения местоположения объектов.Когда вы делаете

Emp e = new Emp();

new Emp();, создаете экземпляр класса Emp и возвращает ссылку на этот экземпляр - допустим, это 123.Затем через Emp e = этот идентификатор присваивается ссылочной переменной e, поэтому он содержит 123.

Позже

lst[0] = e;

123 (ссылка) будет скопирован из e в lst[0].

НО e и lst[0] являются отдельными переменными , даже если они содержат одинаковые значения .Изменение значения на одном из них (для хранения null ссылки) не означает автоматического изменения значения на другом.

Другими словами, когда вы делаете lst[0] = e;, это не означает, что lst[0]сказано всегда использовать значение, хранящееся в e, но для этого нужно взглянуть на текущее значение, удерживаемое e, и скопировать это значение (один раз).Поэтому, когда вы позже измените значение, удерживаемое e (даже на null), оно не изменит то, что удерживает lst[0].

0 голосов
/ 10 декабря 2018

e - это ссылка также на объект, или, если быть точным: переменная, содержащая ссылку.

Итак, у вас есть две ссылки, указывающие на один и тот же объект.Ты "нуль-ифу" только первый.Реальный объект все еще существует, и поскольку на него все еще ссылаются через этот массив, он также не будет собираться сборщиком мусора.

Это все, что нужно для этого.

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