开发者

Android number comparison problem

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

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜