【问题标题】: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;
}