我正在开发一个GUI程序,我已经根据功能创建了集群ActionListeners的类。我的问题是关于JVM如何处理jButton,它们添加了相同的ActionListener。
首先;我知道JVM可以通过让指向相同字符串(例如)的两个引用变量指向内存中的相同字符串对象来节省内存。
public class Example {
String str1 = "SomeString";
String str2 = "SomeString";
}
现在,我的问题是:如果我有5个jButton。所有按钮都添加了相同的ActionListener。当程序运行时,它们是否会添加5个单独的,相同的,同一类的实例?或者JVM会做类似的事情(如上所述)?
答案 0 :(得分:4)
嗯,这实际上取决于你如何创建ActionListeners
。如果你做了
button1.addActionListener(new ActionListener() {
....
});
....
button5.addActionListener(new ActionListener() {
....
});
或者
ActionListener al= new ActionListener() {
....
};
button1.addActionListener(al);
....
button5.addActionListener(al);
在第一种情况下,你是的,有5个不同的动作听众。但在第二个你只有一个。你什么时候只有一个?当它完全相同并且在相同的对象上时。
答案 1 :(得分:3)
取决于。
这将为他们提供相同的实例。
ActionListener al = new ActionListener() { ... };
button.addActionListener(al);
button2.addActionListener(al);
...
虽然这会给他们自己的。
button.addActionListener(new ActionListener() { ... });
button2.addActionListener(new ActionListener() { ... });
答案 2 :(得分:1)
我相信它会将相同的ActionListener对象传递给所有5个按钮。 如果你想知道真相,我建议你亲自测试一下