if语句比较java中的字符串android [duplicate]

问题描述 投票:7回答:3

可能重复: Java String.equals versus ==

我正在尝试在az DBOpenHelper中编写一个方法来扩展SQLOpenHelper类。它应该评估DB中是否有一个具有相同名称的条目。

public boolean existsContact(Contact contact) {

    SQLiteDatabase db = this.getReadableDatabase();
    String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;
    Cursor cursor = db.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {

            String name = cursor.getString(1);
            String cname = contact.getName();
            if (name == cname) {

                cursor.close();
                db.close();
                return true;
            }

        } while (cursor.moveToNext());
    }

    db.close();

    return false;
}

这是Contact类的相关部分:

 public class Contact {

    String _name;
    public String getName(){
        return this._name;
    }
    }

现在这是奇怪的事情:

场景A:if (name == cname),其中name = "foo"cname = "foo"等于假。 Eclipse调试器显示名称的foo和cname的foo具有不同的id。两个变量如前所述在代码中填充。

场景B:if(name == cname),其中varbales加载如下:

String name = "foo";
String cname = "foo";
         statement equals true as it's supposed to.

场景C:if("foo" == "foo")等于true ...但是......调试器出了窗口。 LogCat显示调试器连接,但在eclipse的Debug透视图中没有活动。断点无效。没有显示线程。

java android eclipse string if-statement
3个回答
34
投票

在java中,当在两个对象上使用==时,你实际上并没有比较字符串本身。你需要使用.equals(String)

==实际上比较了两个对象的引用,而不是它们的值。

string1.equals(String target)根据字符串中的实际字符比较两个字符串。

见:http://www.leepoint.net/notes-java/data/expressions/22compareobjects.html


7
投票

==运算符检查对象引用是否相等但equals()方法检查值是否相同

    if (name == cname) 
   {    
    cursor.close();
    db.close();
    return true;
  }

改变它

 if (name.equals(cname)){        
    cursor.close();
    db.close();
   return true;
}

1
投票

当比较java中非原始数据类型的对象(int, char, boolean, etc...)时,必须使用返回布尔值的方法Object#equals(Object)

因此,当您比较两个字符串时,实际上是在检查两个对象是否是同一个实例,而不是实际值。

所有你需要做的就是将name == cname改为name.equals(cname)

© www.soinside.com 2019 - 2024. All rights reserved.