我有一个方法,它在ArrayList中搜索包含两个私有字段的对象。这是方法:
public int searchContactName(String name){
int foundIndex =-1;
for(int i = 0; i < contacts.size(); i++){
if(contacts.get(i).getName() == name){
foundIndex = i;
}
}
return foundIndex;
}
如果我像这样使用它,它的效果很好:
searchContactName("xyName");
但是,如果我尝试将它与scenins.next()一样使用,那就是同名的
String name = scanner.next();
searchContactName(name);
它给我-1。我不明白,我需要以某种方式格式化输入?它是相同的类型,或者如果我使用扫描仪,它会有所不同吗?
答案 0 :(得分:0)
始终使用String.equals()而不是==
您的支票应
if(contacts.get(i).getName().equals(name))
也会看到这一点,原因是您不应该使用== Java String.equals versus ==
答案 1 :(得分:0)
尝试
String name = scanner.nextline(); searchContactName(name);
和
if(contacts.get(i).getName().equalsIgnpreCase ( name)) ...
答案 2 :(得分:0)
您应该使用equals方法来比较字符串值
aggregate
答案 3 :(得分:0)
==
运算符检查两个对象是否是对象的同一个实例,对于硬编码的字符串文字,这恰好是真的。然而,正确的检查方法是使用equals
方法,该方法测试两个对象是否具有相同的值:
public int searchContactName(String name){
int foundIndex =-1;
for (int i = 0; i < contacts.size(); i++){
if (contacts.get(i).getName().equals(name)) { // here!
foundIndex = i;
}
}
return foundIndex;
}
答案 4 :(得分:-1)
scanner.next()将在ArrayList中返回Object。在你的情况下,它不完全是名字。你应该在你从scanner.next()获得的对象上调用getName()方法。验证您编写的代码“contacts.get(i).getName()”