Android号码比较问题

时间:2010-11-09 16:43:25

标签: android hash comparison

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

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 个答案:

答案 0 :(得分:4)

您应该使用correctMd5.equals(md5hash)代替correctMd5 == md5hash。 它解决了这个问题吗?

答案 1 :(得分:0)

问题似乎是:

correctMd5 == md5hash

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

另一方面,如果你想知道内存位置存储的VALUES是否相等,你应该使用

correctMd5.equals(md5hash)

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

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