ExpertiDict

Java · Avançado · Português · Técnico

cache de Integer

/ˈkɐʃi dʒi ˈĩtedʒeɾ/substantivo

Cache de objetos Integer entre -128 e 127 que o autoboxing reutiliza por padrão. Por isso == entre Integers pequenos dá true, e entre grandes costuma dar false.

Onde usar

Bug clássico de code review: comparar Integer com == funciona nos testes com valores pequenos e falha em produção com valores maiores.

Em código

Integer a = 127, b = 127;
Integer c = 128, d = 128;
System.out.println(a == b);      // true
System.out.println(c == d);      // false
System.out.println(c.equals(d)); // true

Exemplos

O == deu true porque o valor cabe no cache de Integer.

Em produção o id passou de 127 e a comparação com == falhou.

Cuidado

Não dependa disso: compare Integer com equals ou desembrulhe para int.

Veja também

Todos os termos de Java