ArrayList迭代不按预期工作

时间:2018-03-17 06:51:13

标签: java arrays class object arraylist

我正在Java中创建一个侧面项目,其中Mobile将存储应用程序列表(ArrayList)和单独的UI类来处理所有输入/输出和业务相关逻辑。问题出在以下Mobile类块中:

public App searchApp(String name)
{
    System.out.println(list);
    for(App app: list) {
        String appName = app.getName();

        if(appName == name)
        {
            return app;
        }
   }

   throw new IllegalStateException();
}

此功能允许用户在列表中搜索应用。以下是从用户那里获取搜索输入的方法:

public String inputSearch()
{
    System.out.println("Enter app name to search: ");
    return sc.nextLine().trim();
}

以下是UI类显示结果的方式:

public void choices(int choice)
{   
    switch(choice)
    {
        case 1:
            String[] input = inputDetails();
            mobile.addApp(input[0], input[1]);
            break;

        case 2:
            String s = inputSearch();
            App found = mobile.searchApp(s);
            System.out.println("App found in search:");
            System.out.println(found.toString());
            break;            

and so on...

问题在于searchApp。

我无法弄清楚为什么条件不起作用,即使打印时appName和name都可以看作是相同的(在两种字符串类型上也使用了trim()但仍然没有成功)。

2 个答案:

答案 0 :(得分:0)

由于nameString,您需要使用.equals()来检查相等性(而不是==)。使用==检查它们是完全相同的对象,但使用equals检查它们的内容是否相同。

所以正确的方法是:

 if(appName.equals(name))
    {...

答案 1 :(得分:0)

虽然上面的答案指出了主要问题,但仍然可以通过执行类似

之类的操作来使用一些显式/隐式空值检查来改进
StringUtils.equals(appName, name).

否则,如果appName为null,您将获得一个丑陋的NullpointerException; - )