Однако я обнаружил в своем коде потенциальный дефект, который меня немного удивил.
Следующий код:
Код: Выделить всё
Integer cdiCt = ...;
Integer cdsCt = ...;
...
if (cdiCt != null && cdsCt != null && cdiCt != cdsCt)
mismatch = true;
Изменение условия на:
Код: Выделить всё
if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt))
Может ли кто-нибудь пролить свет на то, почему это произошло? До сих пор я видел такое поведение только на своем локальном хосте на своем компьютере. В этом конкретном случае код успешно прошел около 20 сравнений, но потерпел неудачу в 2. Проблема постоянно воспроизводилась.
Если это распространенная проблема, она должна вызывать ошибки в других наших средах (разработки и тестирования), но до сих пор никто не сообщил о проблеме после сотен тестов, выполняющих этот фрагмент кода.
Разве все еще незаконно использовать == для сравнения два целочисленных значения?
В дополнение ко всем прекрасным ответам ниже, следующая ссылка stackoverflow содержит немало дополнительной информации. На самом деле это дало бы ответ на мой первоначальный вопрос, но поскольку я не упомянул автобокс в своем вопросе, он не появился в выбранных предложениях:
Почему компилятор/JVM не может просто заставить автобокс «просто работать»?
Подробнее здесь: https://stackoverflow.com/questions/363 ... -equals-vs
Мобильная версия