我正在开发一个GUI程序,在其中创建了一些类,这些类按功能将ActionListeners聚类。我的问题是关于JVM如何处理jButton,已将相同的ActionListener添加到它们中。
第一的;我知道JVM可以节省内存,方法是让两个指向同一字符串(例如)的引用变量指向内存中的同一字符串对象。
public class Example {
String str1 = "SomeString";
String str2 = "SomeString";
}
现在,我的问题是:如果我有5个jButton。所有按钮都添加了相同的ActionListener。当程序运行时,是否会向它们添加5个相同类的单独的,相同的实例?还是JVM会做类似的事情(与上面提到的一样)?
最佳答案
好吧,这实际上取决于您如何创建ActionListeners
。如果你做了
button1.addActionListener(new ActionListener() {
....
});
....
button5.addActionListener(new ActionListener() {
....
});
或者
ActionListener al= new ActionListener() {
....
};
button1.addActionListener(al);
....
button5.addActionListener(al);
诚然,在第一种情况下,您有5个不同的 Action 监听器。但是在第二个中,您只有一个。什么时候只有一个?当它在完全相同的对象上执行相同的操作时。
关于Java,引用变量指向内存中的同一对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18409935/