Dúvida amadora sobre variáveis

Aqui estou eu novamente para pedir o auxílio de vocês.

É o seguinte, variáveis de referência guardam referências, correto? E por causa disso não podemos comparar variáveis de referência atrás do operador == , ao invés disso devemos usar o .equals()

Então sabem me explicar o motivo de, por exemplo:

Integer n1 = 2;
Integer n2 = 2;

n1 == n2 

Por que o resultado é true? Não deveria ser false, já que está comparando as referências?

Isso é por causa do Autoboxing. Na comparação, o java faz a conversão automática entre os tipos primitivos e seus wrappers (int = Integer, long = Long, etc.)

2 curtidas

Se vc der new Integer passando no construtor valores iguais, ai vc tem um false.

Isso desde que o seu Integer seja maior que -128 e menor que 127. Senão, por padrão, ele vai criar uma nova instância de qualquer jeito.

Integer n1 = 127;
Integer n2 = 127;
System.out.println(n1 == n2); TRUE

Integer n1 = 128;
Integer n2 = 128;
System.out.println(n1 == n2); FALSE
2 curtidas

https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html, olhe também o valueOf

1 curtida

Agradeço. A resposta de todos vocês me ajudaram a sanar a dúvida.
Grande abraço!