【问题标题】:if statement comparing strings in java android [duplicate]if语句比较java android中的字符串[重复]
【发布时间】:2012-12-06 08:34:43
【问题描述】:

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

我正在尝试在 az DBOpenHelper extends SQLOpenHelper 类中编写一个方法。 它应该评估数据库中是否有同名的条目。

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" 等于 false。 Eclipse 调试器显示名称的 foo 和 cname 的 foo 具有不同的 id。 两个变量都如之前在代码中看到的那样填充。

场景 B:if(name == cname) 变量的加载方式如下:

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

场景 C:if("foo" == "foo") 等于 true...但是...调试器退出窗口。 LogCat 显示调试器已连接,但 Eclipse 的调试透视图中没有任何活动。断点没有影响。没有显示线程。

【问题讨论】:

  • 最好使用 name.equals(cname);永远不要使用 == 进行字符串比较。
  • 您可以更改代码以使用 sql 检查名称是否存在并避免循环数据 例如:SELECT * FROM " + TABLE_CONTACTS + ' Where name = ' + contact.getName()

标签: java android eclipse string if-statement


【解决方案1】:

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

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

随它改变

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

【讨论】:

    【解决方案2】:

    在比较非原始数据类型(int, char, boolean, etc...)的 java 中的对象时,您必须使用方法 @987654321@,它返回一个布尔值。

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

    您只需将name == cname 更改为name.equals(cname)

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 1970-01-01
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        相关资源
        最近更新 更多