Wrappers

1 resposta
_

Alguem sabe explicar porque ocorre isso???

Integer a = 127;
Integer b = 127;

System.out.println(a == b); // Imprime true

Integer c = 128;
Integer d = 128;
System.out.println(c == d);//Imprime false

1 Resposta

J

Porque objetos Integer são imutaveis, então é possivel a utilização de uma especie de cache para eles, para economia de memoria, como é feito com String, verificando o codigo da classe Integer aqui eu vi que ela faz cache de valores entre -128 e 127, pois são os numeros mais usados, e um cache maior que isso ficaria grande demais e perderia o sentido, veja o codigo que faz cache:

public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; } return new Integer(i); }

Veja que se o numero está no intervalo de -128 a 127 ele retorna um objeto do cache, se não, cria um novo.

Criado 9 de julho de 2006
Ultima resposta 10 de jul. de 2006
Respostas 1
Participantes 2