Вы должны использовать метод равенства, а не оператор ==. == проверить, равны ли два объекта, но вы создаете разные объекты с одинаковым значением и вам нужен метод equal()
для сравнения значений объекта.
Обновление:
Причина различного поведения Integer.valouOf(5)
и Integer.valouOf(500)
заключается в том, что реализация Integer использует статическое значениеOFCache размером -128..127.
Начиная с Java 7 это настраивается с помощью аргумента командной строки -XX:AutoBoxCacheMax=<size>