Todos os números de -127 até 128 estão em cache. Ou seja, sempre que você solicita-los, o mesmo Integer será retornado. Não sei porque desse valor, creio que devam ter descoberto que eles são muito usados.
Agora, criando fora desse escopo, você obterá objetos diferentes, pois eles sempre serão criados.
No caso, você está fazendo a comparação com ==. Para obter sempre o mesmo resultado, use o método equals, como você faria com um String. Nesse caso, os valores (ao invés da identidade) serão comparados.