1

私は私のクラスのこのメソッドに問題があります。常にfalseを返します。乗客は別のクラスです。これは、Passengerオブジェクトの配列リストを作成するTrainクラスのメソッドです。ArrayListpassengerListで名前をパラメーターとして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;
}
4

3 に答える 3

4
 if (temp.getName() == a)

する必要があります

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

文字列の比較では、==ではなく常にequals()メソッドを使用する必要があります(文字列リテラルを除く)。

両方が同じオブジェクトを指していない場合、==条件は失敗しますtemp.getName()a

==参照が等しいかどうかをチェックします。equals()コンテンツの同等性をチェックします。

このチュートリアルはあなたを助けるかもしれません。

于 2012-11-13T20:42:11.630 に答える
2

if (temp.getName() == a)である必要がありますif (temp.getName().equals(a))

前者は、参照が等しいかどうかを比較します。後者は実際に文字列値が等しいかどうかを確認します。

于 2012-11-13T20:42:52.623 に答える
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;
}
于 2012-11-13T21:03:31.680 に答える