Java,指向内存中同一对象的引用变量

Dan*_*Mac 5 java memory variables user-interface

我正在开发一个GUI程序,我在其中创建了类,通过功能集群ActionListeners.我的问题是关于JVM如何处理jButton,它们添加了相同的ActionListener.

第一; 我知道JVM可以通过让指向相同字符串(例如)的两个引用变量指向内存中的相同字符串对象来节省内存.

public class Example {
    String str1 = "SomeString";
    String str2 = "SomeString";  
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:如果我有5个jButton.所有按钮都添加了相同的ActionListener.当程序运行时,它们是否会添加5个单独的,相同的,同一类的实例?或者JVM会做类似的事情(对于上面提到的)?

  • 提前致谢 :)

Mar*_*ssi 4

嗯,这实际上取决于您如何创建ActionListeners. 如果你这样做了

button1.addActionListener(new ActionListener() {
    ....
});
....
button5.addActionListener(new ActionListener() {
    ....
});
Run Code Online (Sandbox Code Playgroud)

或者

ActionListener al= new ActionListener() {
    ....
};
button1.addActionListener(al);
....
button5.addActionListener(al);
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,您确实有 5 个不同的动作侦听器。但在第二次你就只有一个了。什么时候才能只有一个呢?当它在相同的对象上执行完全相同的操作时。