Как JVM обрабатывает ссылочные переменные? - PullRequest
0 голосов
/ 04 ноября 2018

Просто хочу узнать, верно ли это утверждение:

Для этих строк кода:

Person Bob = new Person("Bob W.", 30);
System.out.println(Bob.name);

Объект Person создается, и его адрес памяти или тип ссылки отправляется Бобу, ссылочной переменной. Затем, когда мы вызываем «Bob.name», JVM просматривает «адрес», который хранится у Боба, и отправляется туда, чтобы посмотреть на объект Person. Затем JVM смотрит на имя Боба и печатает его!

Спасибо!

1 Ответ

0 голосов
/ 04 ноября 2018

Все объекты в Java доступны через их ссылки (в отличие от примитивного доступа!). Переменная bob является ссылкой на экземпляр класса Person. Распределение / удаление экземпляров памяти будет обрабатываться JVM, а данные экземпляра будут поддерживаться JVM до тех пор, пока существуют сильные ссылки на этот экземпляр (т. Е. Person bob = new ... объявляет строгую ссылку на вновь созданный Person экземпляр).

Объект Object создан, и его адрес памяти или тип ссылки отправляется Бобу, ссылочная переменная

Было бы правильнее сказать, что «Создан экземпляр объекта Person», но да, все переменные, используемые для объектов в Java, являются ссылочными переменными. Вызов new вернет ссылку на созданный экземпляр. Может быть много ссылочных переменных, которые указывают на один экземпляр. Например, в следующем фрагменте кода мы можем иметь две ссылки, указывающие на один экземпляр:

Person bob = new Person("Bob W.", 30);
Person bob2 = bob;

Далее, когда мы вызываем «Bob.name», JVM смотрит на «адрес», который хранится у Боба, и отправляется туда, чтобы посмотреть на объект Person.

Точно. После того, как код скомпилирован, байт-код JVM будет использовать инструкцию getfield для доступа к полю name. Эта инструкция требует ссылку на объект и ссылку на поле. В этом случае bob.name будет использовать bob в качестве objectref и Person#name в качестве fieldref.

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