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
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
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.