在ArrayList中搜索字符串;总是返回假

时间:2012-11-13 20:41:33

标签: java search arraylist

我在上课这个方法时遇到了麻烦。它总是返回false。 乘客是一个单独的班级。这是我的Train类中的一个方法,它创建了一个Passenger对象的数组列表。我正在创建一个方法,它将在ArrayList passengerList中搜索名称为参数的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;
}

3 个答案:

答案 0 :(得分:4)

 if (temp.getName() == a)

应该是

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

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

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

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

tutorial可能会对您有所帮助。

答案 1 :(得分:2)

if (temp.getName() == a)应为if (temp.getName().equals(a))

前者比较了相等的参考。后者实际上会检查字符串值是否相等。

答案 2 :(得分:0)

我建议将此代码编写得更优雅,更清晰(检查为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;
}