代码之家  ›  专栏  ›  技术社区  ›  Hamid

Android号码比较问题

  •  0
  • Hamid  · 技术社区  · 14 年前

    我将一个数字(123456)转换为哈希键,并使用以下方法存储在sharedrefs中:

    String correctMd5 = passwdfile.getString(PhoneFinder.PASSWORD_PREF_KEY, null);
    

    然后,我从字符串中检索数字:

    String[] tokens = msg.getMessageBody().split(":");
    String md5hash = PhoneFinder.getMd5Hash(tokens[1]);
    

    并将两者进行比较:

    if (correctMd5 == md5hash) {
    Toast.makeText(context, "Hash OK: " + md5hash, Toast.LENGTH_SHORT).show();
    }
    

    但是,此检查没有成功完成。

    如果我转换成字符串并显示它们,散列值是相同的,但是如果我转换成字节,4个最右边的字节是不同的。我假设有一个特殊的角色隐藏在那里,我该如何检查和杀死它?

    2 回复  |  直到 14 年前
        1
  •  4
  •   laurentsebag    14 年前

    你应该使用 correctMd5.equals(md5hash) 而不是 correctMd5 == md5hash . 它能解决问题吗?

        2
  •  0
  •   Matt D    12 年前

    问题似乎是:

    correctMd5 == md5hash
    

    因为字符串是Java(Android)中的对象,所以它将比较对象,而不是字符串值。例如,如果您有两个不同的变量,它们可能位于两个不同的内存位置,或者它们可能是对同一个内存位置的引用。

    另一方面,如果您想找出存储位置存储的值是否相等,则应该使用

    correctMd5.equals(md5hash)
    

    在条件中,可以有两个字符串“1000”和“1000”,但存储在不同的内存位置。在我的条件中,如果字符串值相等,无论内存位置如何,它仍然是真的。

    如果==为真,.equals()应为真(在大多数情况下,如果不是全部)。但是如果.equals()为真,就不能保证==为真。