Duvida Autoboxing

Bom dia, Pessoal.

Tenho duas classes de Teste que fazem quase a mesma coisa!
a primeira vai sair como resposta.

[color=red]Diferentes objetos
Objetos Significativamente equivalentes[/color]

e a segunda vai sair como resposta.

[color=red]Objetos Significativamente equivalentes[/color]

porque a segunda não sai com a mesma resposta da primeira se é a mesma coisa só diminui os valores na segunda classe.

Primeira Classe.

[code]public class TestBoxing {

public static void main(String [] args){
		
	Integer i1 = 1000;
	Integer i2 = 1000;
	
	if(i1 != i2){
		System.out.println("Diferentes objetos");
	}
	
	if(i1.equals(i2)){
		System.out.println("Objetos Significativamente equivalentes");
	}
	
}

}
[/code]

Segunda Classe

[code]public class TestBoxing {

public static void main(String [] args){
	
	Integer i1 = 10;
	Integer i2 = 10;
	
	if(i1 != i2){
		System.out.println("Diferentes objeto");
	}
	if(i1.equals(i2)){
		System.out.println("Objetos Significativamente equivalentes");
	}
}

}
[/code]

Vou dar de novo a tal resposta.

Quando você escreve

Integer i1 = 123456;

na verdade o compilador transforma isso para o seguinte código:

Integer i1 = Integer.valueOf (123456);

Se você olhar a implementação de valueOf, vai ver que ele faz o seguinte:

Se o parâmetro estiver entre -128 e +127, ele pega um objeto Integer que já tem guardado em um array, prontinho para ser devolvido.

Se for >= 128 ou < -128, então ele simplesmente cria um new Integer.

Daí você pode entender por que é que os resultados são diferentes para o número 10 e o número 1000.