0

该程序应该在按下按钮时将按钮值“ab”保存到 ArrayList,但是 if 命令似乎永远无法工作,我尝试删除它并查看它是否有效,它确实有效,并且 ArrayList 更新为新的价值。因此,如果我按下按钮,当它出现在 J Windows 中时,什么都不会发生。

该程序稍后将数组保存到文件中,因此如果 if 存在并且我单击了多次我想要的次数,则基本上什么都不会保存,但是如果这个中的 if 循环运行,那么它就可以工作

 public void actionPerformed(ActionEvent a) 
    {
        ArrayList<String> aList = new ArrayList<String>();
            if (a.getActionCommand() == "ab")
                aList.add("ab");
    }

因此,如果这样做了,它会打印出世界,并且 aList 将在零索引中填充 ab :

public void actionPerformed(ActionEvent a) 
{
         ArrayList<String> aList = new ArrayList<String>();
            aList.add("ab");
}
4

2 回答 2

0

首先,aList 是局部变量,它会在方法退出时被移除。

第二:

a.getActionCommand() == "ab"

您必须使用方法比较String对象:equals

a.getActionCommand().equals("ab")

或者

"ab".equals(a.getActionCommand()) //hack for prevention null reference after a.getActionCommand()

您的示例中有参考比较,但使用equals您将比较对象,而不是参考。

于 2015-12-14T13:51:43.140 回答
0

您的列表仅存在于方法的范围内。为了从“外部”使用它,您应该将它用作实例变量。

例如:

public class A implements ActionListener {
    private final List<String> aList;

    public A() {
        aList = new ArrayList<String>();
    }

    ...

    public void actionPerformed(ActionEvent a) 
    {
        if (a.getActionCommand().equals("ab")) {
            aList.add("ab");
        }
    }
}
于 2015-12-14T13:52:27.227 回答