[RESOLVIDO] Ajuda com o resultado do código

1 resposta
CrOnNoS
public static void main(String[] args) {
		Integer inteiro = 90;
		Integer outroInteiro = 90;

		System.out.println(inteiro != outroInteiro);
		System.out.println(inteiro == outroInteiro);

		Integer i1 = 129;
		Integer i2 = 129;

		System.out.println(i1 != i2);
		System.out.println(i1 == i2);
	} // main

Resultado:

false
true
true
false

Tava reparando que o resultado dessa comparação usando a classe Integer com valores que poderiam ser colocados em Byte, gera um resultado que pareceu bem estranho. As mesmas condições usando valores a cima de byte não dá o mesmo resultado, e nem usando classes wrapper diferentes. Alguém sabe explicar o que tá acontecendo ?

1 Resposta

ViniGodoy

O java tem um cache de inteiros, de números no range de um byte. Sempre que vc faz:

Integer x = 90;

O java converte pra

Integer x = Integer.valueOf(90);

O método valueOf faz o seguinte:

  1. SE o objeto está nesse cache, retorna o objeto do cache;
  2. Caso contrário cria um novo integer com o valor.

Portanto, números no range de um byte irão retornar true no ==, pois se tratam do mesmo objeto, a mesma referência. Números fora desse range retornam objetos diferentes, portanto, o == retorna false. Por isso o certo é fazer testes de objetos usando equals.

Criado 8 de setembro de 2010
Ultima resposta 8 de set. de 2010
Respostas 1
Participantes 2