Проблема сравнения номеров Android - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть число (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 ]

4 голосов
/ 09 ноября 2010

Вы, вероятно, должны использовать correctMd5.equals(md5hash) вместо correctMd5 == md5hash.Это решает проблему?

0 голосов
/ 09 ноября 2010

Проблема выглядит следующим образом:

correctMd5 == md5hash

Поскольку String - это объект в Java (Android), он будет сравнивать объект, а не его значение String.Например, если у вас есть две разные переменные, они могут находиться в двух разных ячейках памяти или они могут быть ссылками на одну и ту же ячейку памяти.

С другой стороны, если вы хотите выяснить, хранятся ли ЗНАЧЕНИЯпо тому, как места в памяти равны, вы должны использовать

correctMd5.equals(md5hash)

В вашем условном выражении вы можете иметь две строки «1000» и «1000», но хранящиеся в разных местах памяти.По моему условию, это будет все равно true независимо от места в памяти, если значения String равны.

Если == true, то .equals () должно быть true (в большинстве случаев, если не во всех).Но если .equals () имеет значение true, нет гарантии, что == верно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...