java - 虚拟机或编译器如何诊断Java中具有相同变量名的两个对象?

标签 java object variables reference

我无法理解虚拟机或编译器的工作原理! 考虑通过以下方式创建的两个 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 来诊断他们,但是如何呢?你能帮我弄清楚机器如何与它们一起工作吗?

最佳答案

当您将 new JButton("firstJB") 分配给 jb 变量时,该变量将保存对第一个 JButton 对象的引用。

稍后,当您将 new JButton("secondJB") 分配给 jb 变量时,它会保存对第二个 JButton 对象的引用。第二次赋值不会影响第一个 JButton 对象,该对象已添加到 Container 对象中(contentPane.add(jb) 调用在 Container 对象中存储对 JButton 对象的引用),因此不会被垃圾回收。

关于java - 虚拟机或编译器如何诊断Java中具有相同变量名的两个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48146334/

相关文章:

java - 如何从 SOAP 响应中获取 xml 元素的值? (安卓)

java - 防止多次下载 Java Web Start/JNLP

java - 使用自定义身份验证了解 Spring Security 中的 "Access Denied"

java - 如何在CXF Client中使用PATCH方法

Javascript根据子集更新对象数组中的特定元素

javascript - 无法对使用类选择器检索到的元素执行任何操作

ruby - 理解 Ruby - 未定义的局部变量

javascript - JS CoffeeScript - 方法中的相同随机数

Jquery DataTables 中的 Javascript 变量

javascript - 我如何使用简单模式来动态确认弹出窗口