У меня есть класс Class1, в котором я храню какую-то свою информацию.
В классе активити А я создаю экземпляр своего класса Class1 cl1 = new Class1(), заполняю данными и передаю эту ссылку в класс следующей активити ActivityB actB.cl2 = cl1
В классе активити B поле cl2 статичное, и доступ к нему внутри пакета. Активити А рано или поздно уничтожится системой. Тогда что будет с полем cl2?
Ответ
В Java всё передается по значению без исключений. В данном случае будет передана ссылка на объект по значению. При уничтожении Активити А с объектом, на который ссылается cl1, ничего не произойдет, поскольку на него будет ссылаться объект cl2 из Активити B
Объект будет удален сборщиком мусора (GC), если до него не добраться из так называемых корневых объектов - это объекты, которые доступны вне Heap-памяти. К таким объектам относят все локальные переменные из стека, активные потоки, загруженные классы и другие. В процессе поиска мусора GC начинает обход с корневых объектов и постепенно спускаясь по дереву объектов отмечает их как "живые". Соответственно если объект не доступен ни из одного корневого объекта, то он будет удален.
Комментариев нет:
Отправить комментарий