O java tem um cache interno, que vai de -128 até 128 (1 byte). Assim, tipos criados com autoboxing (ou seja, automaticamente convertidos de int para Integer), tentam sempre que possível utilizar esse cache.
Ou seja, quando você faz:
Integer x = 100; //Cria um novo objeto e adiciona ao cache
Integer y = 100; //Reusa o objeto do cache
Integer z = 100; //Reusa o objeto do cache
O java vai até uma tabelinha, que contém vários Integer já criados (de -128 até 128 ), acha lá o objeto que corresponde ao 100, e usa esse objeto nos três casos. Se o 100 ainda não foi usado, um novo objeto será criado e adicionado a essa tabela, para então ser reusado em novas conversões. Como no fundo as três referências contém efetivamente o mesmo objeto, comparações com == irão funcionar. Isso é vantajoso pois o equals funciona mais rápido em objetos idênticos. Já que uma implementação típica começará testando pela identidade:
public void equals(Object other) {
if (other == this)
return true;
if (other.getClass() != Integer.class)
return false;
return value == ((Integer)other).value;
}
Você pode pedir explicitamente para não usar o cache através do comando new. Se fizer:
Integer x = new Integer(100); //Cria um novo objeto e o adiciona ao cache
Integer y = new Integer(100); //Ignora o cache e cria um novo objeto
Integer z = new Integer(100); //Ignora o cache e cria um novo objeto
Terá objetos diferentes.
Via de regra, a comparação com == em objetos diz se eles são o mesmo objeto, isto é, se ocupam a mesma posição de memória. Ele não testa igualdade, mas sim, identidade.
Com objetos a única coisa que testa igualdade é o método equals. A definição de igualdade entre dois objetos é relativa. No caso do Integer é clara, dois objetos desse tipo são iguais sempre que seu valor inteiro interno for igual.
Outra forma de usar o cache, é criando inteiros através do método valueOf, ao invés do new:
Integer x = Integer.valueOf(100); //Usa do cache, se tiver lá.
Esse cache existe para todos os objetos que representam inteiros: Byte, Short Integer e Long.