开发者

Android number comparison problem

开发者 https://www.devze.com 2023-01-24 00:38 出处:网络
I have a number (123456) converted to a hash key and stored in SharedPrefs using: String correctMd5 = passwdfile.getString(PhoneFinder.PASSWORD_PREF_KEY, null);

I have a number (123456) converted to a hash key and stored in SharedPrefs using:

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

I then retreive the number from a string:

String[] tokens = msg.getMessageBody().split(":");
String md5hash = PhoneFinder.getMd5Hash(tokens[1]);
开发者_如何转开发

and compare the two:

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

However, this check does not complete succesfully.

If I convert to strings and display them, the hashes are the same, however if I convert to bytes the 4 right most bytes are different. I assume some special character is hidden in there somewhere, how do I check and kill it?


You should probably use correctMd5.equals(md5hash) instead of the correctMd5 == md5hash. Is it solving the problem ?


The problem appears to be:

correctMd5 == md5hash

Because a String is an Object in Java (Android) this will compare the Object, not its String value. For instance, if you have two different variables they might be in 2 different memory locations, or they might be references to the same memory location.

On the other hand, if you want to find out if the VALUES stored by the memory location are equal, you should use

correctMd5.equals(md5hash)

In your conditional, you could have two strings "1000" and "1000" but stored at different memory locations. In my conditional, it will still be true regardless of memory location, if the String values are equal.

If == is true, .equals() should be true (in most cases, if not all). But if .equals() is true, there is no guarantee that == is true.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号