我有一个数字(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个字节是不同的。我假设某个地方隐藏了一些特殊的角色,我该如何检查并杀死它?
答案 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,则无法保证==为真。