Чтобы понять, почему это произошло, нужно углубиться во внутреннюю работу Java. Оператор "==" при сравнении объектов в Java проверяет, ссылаются ли обе переменные на один и тот же объект в памяти. В случае с Integer, Boolean, Character, и Long, чтобы улучшить производительность, Java применяет кэширование значений для некоторых диапазонов чисел.
Для Integer JVM кэширует значения в диапазоне от -128 до 127. Это означает, что при создании объекта Integer в этом диапазоне Java не создаёт новый объект, а использует уже существующий из пула кэшированных значений.