Здравствуйте, можете подсказать что происходит со ссылками и объектами в этой программе(задача из Head First Java)?
class Bees {
Honey [] beeHA;
}
class Raccoon {
Kit k;
Honey rh;
}
class Kit {
Honey kh;
}
class Bear {
Honey hunny;
}
public class Honey {
public static void main(String [] args) {
Honey honeyPot = new Honey();
Honey [] ha = {honeyPot, honeyPot, honeyPot, honeyPot};
Bees b1 = new Bees();
b1.beeHA = ha;
Bear [] ba = new Bear[5];
for (int x=0; x < 5; x++) {
ba[x] = new Bear();
ba[x].hunny = honeyPot;
}
Kit k = new Kit();
k.kh = honeyPot;
Raccoon r = new Raccoon();
r.rh = honeyPot;
r.k = k;
k = null;
}
}
Верны ли следующие утверждения?
В строке k.kh = honeyPot мы присваиваем ссылке из хипа kh значение локальной(стековой) ссылки honeyPot.
в строке r.k = k присваиваем значение локальной стековой ссылки k(k.kh) ссылке из хипа(полю класса) r.k.
Последний пункт стоит особняком, именно здесь у меня возникли недопонимания после прочтения ответа из учебника: "Поскольку гк по-прежнему ссылается на объект Kit, переменная r.k.kh (несмотря на то что она явно не объявлена) связана с объектом!". Но ведь ссылка к из хипа ничего не знает о поле kh! Или знает, т.к. это переменная класса Kit? И как это вообще понимать r.k.kh?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей