Как виртуальная машина или компилятор диагностирует два объекта с одним и тем же именем переменной в Java?

63
7

У меня есть проблема, чтобы понять, как работает виртуальная машина или компилятор! Рассмотрим два JButton, созданных следующим образом:

    JButton jb =new JButton("firstJB");
jb.addActionListener(this);
Container contentPane = getContentPane();
contentPane.add(jb);
jb = new JButton("secondJB");
jb.addActionListener(this);
contentPane.add(jb);

Проблема заключается в том, как VM или компилятор диагностирует эти два объекта.

Они имеют одинаковое имя для переменной, а переменная должна ссылаться на адрес в памяти. У нас есть переменная для двух адресов?

Я думал, может быть, компилятор диагностирует их своим ActionEvent, но как? Можете ли вы помочь мне разобраться, как с ними работает машина?

спросил(а) 2021-01-25T13:30:22+03:00 4 месяца, 4 недели назад
1
Решение
64

При назначении new JButton("firstJB") в jb переменной, переменная содержит ссылку на первый JButton объекта.

Позже, когда вы задаете new JButton("secondJB") в jb переменной, она содержит ссылку на второй JButton объекта. Это второе присваивание не влияет на первый объект JButton, который уже был добавлен в объект Container (contentPane.add(jb) хранит ссылку на объект JButton внутри объекта Container), и поэтому не будет собираться мусор,

ответил(а) 2021-01-25T13:30:22+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема