Diferença em comparação de Wrapers

A questão é se vc fizer o seguinte:


	public static void main(String[] args) {
		
		Integer i = 127;
		Integer y = 127;
		
		if (i == y) {
			System.out.println("iguais");
		}
	}

A saida é iguais…

porem se fizer isto:


	public static void main(String[] args) {
		
		Integer i = 128;
		Integer y = 128;
		
		if (i == y) {
		  System.out.println("iguais");
		}
	}

Ele não vai entrar no if…

a regra é para numeros que não excedem a 127 bytes o == pode ser usado porem para numeros que exedem a isto tem que se usar equals… porque disto???

seria isto um bug na api dos wrapers??? não vejo nenhuma razão para colocarem algo deste tipo…
e o pior isto é questão de certificação… se deparar com algo assim e errar na prova é uma puta sacanagem…

que eu saiba nem a primeira versão poderia funcionar hehehe…
mesmo com o boxing… eu nao confiaria nele para operacoes deste tipo…

Nem eu confio em operações deste tipo… e sempre melhor usar o equals… porem este fato de boxing com valores de ate 1b é realmente extranho… pq so ate um 1b??? se teria que fazer boxing o certo seria para qualquer valor… acredito que isto seja uma especie de bug…