我无法理解虚拟机或编译器的工作原理! 考虑通过以下方式创建的两个 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/