5

我正在开发一个 GUI 程序,我在其中创建了类,按功能将 ActionListeners 聚集在一起。我的问题是关于 JVM 如何处理 jButtons,它们添加了相同的 ActionListener。

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

public class Example {
    String str1 = "SomeString";
    String str2 = "SomeString";  
}

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

  • 提前致谢 :)
4

3 回答 3

4

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

button1.addActionListener(new ActionListener() {
    ....
});
....
button5.addActionListener(new ActionListener() {
    ....
});

或者

ActionListener al= new ActionListener() {
    ....
};
button1.addActionListener(al);
....
button5.addActionListener(al);

在第一种情况下,您确实有 5 个不同的动作侦听器。但是在第二个中,您只有一个。什么时候可以只有一个?当它在相同的对象上完全相同时。

于 2013-08-23T18:59:17.820 回答
3

这取决于。

这将为他们提供相同的实例。

ActionListener al = new ActionListener() { ... };
button.addActionListener(al);
button2.addActionListener(al);
...

而这会给他们自己的。

button.addActionListener(new ActionListener() { ... });
button2.addActionListener(new ActionListener() { ... });
于 2013-08-23T18:58:08.453 回答
1

我相信它会将相同的 ActionListener 对象传递给所有 5 个按钮。如果你想知道真相,我建议你自己测试一下

于 2013-08-23T18:59:40.223 回答