Duvida Autoboxing

1 resposta
G

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.

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");
		}
		
	}
}

Segunda Classe

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");
		}
	}
}

1 Resposta

E

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.

Criado 26 de fevereiro de 2013
Ultima resposta 26 de fev. de 2013
Respostas 1
Participantes 2