Android два целых числа с одинаковым значением не равны - PullRequest
3 голосов
/ 26 октября 2011

Я не являюсь Java-парнем, поэтому я не уверен, является ли это просто языковой проблемой.

Я пишу приложение для Android.В одном месте приложения я сравниваю с целочисленными значениями (номер версии), чтобы увидеть, какую версию приложения они используют, чтобы выполнить какое-либо действие, если они не обновлены.Я замечаю, что мой код действия всегда выполняется.Поэтому я проверил с помощью отладчика, и там, где я проверяю, работают ли они правильной версии, у меня есть такой код:

if (savedVersionCode != currentVersionCode){
   //perform work
}

, оба savedVersionCode и currentVersionCode являются целыми числами и равныто же значение (в данном случае 226), но оно все равно включается и выполняет работу.

Я замечаю, что хотя оба значения 226, каждое целое число (если вы проверяете его в затмении) имеет id, и они оба разные.

Любые идеи о том, что происходитздесь

1 Ответ

11 голосов
/ 26 октября 2011

Если они Integer значения, вы сравниваете ссылки.Два разных объекта могут эффективно представлять одно и то же число.Попробуйте:

if (savedVersionCode.intValue() != currentVersionCode.intValue())

или

if (!savedVersionCode.equals(currentVersionCode))

Обратите внимание, что вы вполне могли справиться с меньшими числами, так как автобокс вернет те же ссылки для чисел в небольшом диапазоне около 0. Так что дляпример:

Integer x = 5;
Integer y = 5;
System.out.println(x == y); // Prints true

x = 1000;
y = 1000;
System.out.println(x == y); // *Could* print true, but probably won't
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...