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

时间:2013-08-23 18:55:24

标签: java variables memory user-interface

我正在开发一个GUI程序,我已经根据功能创建了集群ActionListeners的类。我的问题是关于JVM如何处理jButton,它们添加了相同的ActionListener。

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

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

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

  • 提前致谢:)

3 个答案:

答案 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个按钮。 如果你想知道真相,我建议你亲自测试一下