【问题标题】:Searching an ArrayList for a String; always return false在 ArrayList 中搜索字符串;总是返回假
【发布时间】:2012-11-13 20:41:33
【问题描述】:

我在课堂上使用这种方法时遇到了问题。它总是返回假。 乘客是一个单独的类别。这是我的火车类中的一个方法,它创建一个乘客对象的数组列表。我正在创建一个方法,它将在 ArrayList 乘客列表中搜索以名称作为参数的 Passanger 对象。

public boolean search(String a){
    Passenger temp;
    boolean query = false;
    for (int i =0; i<passengerList.size(); i++)
    {
        temp=passengerList.get(i);
        if (temp.getName() == a)
        {
            query = true;
        }
    }
    return query;
}

【问题讨论】:

    标签: java search arraylist


    【解决方案1】:
     if (temp.getName() == a)
    

    应该是

     if (temp.getName().equals(a))
    

    字符串比较应始终使用 equals() 方法而不是 ==(字符串文字除外)。

    如果temp.getName()a 都没有指向同一个对象,== 条件将失败。

    == 检查引用是否相等。 equals() 检查内容是否相等。

    这个tutorial 可以帮助你。

    【讨论】:

    • 感谢您帮助我解释了很多您给我的链接!
    【解决方案2】:

    if (temp.getName() == a) 应该是if (temp.getName().equals(a))

    前者比较引用是否相等。后者实际上检查字符串值是否相等。

    【讨论】:

      【解决方案3】:

      我建议将这段代码写得更优雅、更简洁(检查 null):

      public boolean search(String a){  
          boolean query = false;
          for (Passenger temp : passengerList)
          {
              if (temp != null && temp.getName()!=null && temp.getName().equals(a))
              {
                  query = true;
              }
          }
          return query;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 2013-08-04
        相关资源
        最近更新 更多