rafadelnero:
kadu.m.lino:
O operador == compara a referência do objeto na memória.
.equals() compara o valor
mas pq isso da true?
String teste1 = "teste";
String teste2 = "teste";
syso(teste1==teste2)
Porque o java, por questões de performance, cria um pool de String. Quando você cria uma string literal ele procura se há uma string literal nesse pool com o mesmo valor. Caso exista ele aponta para o mesmo lugar.
resumindo:
//isso dá true
"teste" == "teste"
//isso dá false
new String("teste") == new String("teste")
Humm, entendi, mas concluindo, todas as classes Wrapper com exceção da classe String não criam pool de objetos para apontar para o mesmo objetos tendo eles os mesmos valores.
Se criar pool, sei que as classes Integer até o número 127 podem ser comparadas com == que retorna true.
O código que referencia o objeto na memória não pode ser exibido através do Java.
Ficou meio confuso o que você escreveu, mas enfim, vou tentar te ajudar.
Pra comparar conteúdo de Wrappers, somente usando o .equals(). Se você usar == ele compara os endereços(referências) de memória de cada uma.
No exemplo abaixo, o resutado será "Diferente":
Integer inteiro1 = new Integer(12);
Integer inteiro2 = new Integer(12);
if (inteiro1 == inteiro2) {
System.out.println("Iguais");
} else {
System.out.println("Diferentes");
}
Já nesta, será "Iguais", pois os dois handlers(olha só, palavra nova, que bonita) estão referenciando a um mesmo objeto na memória:
Integer inteiro1 = new Integer(12);
Integer inteiro2 = inteiro1;
if (inteiro1 == inteiro2) {
System.out.println("Iguais");
} else {
System.out.println("Diferentes");
}
A única exceção pra isso tudo é a classe String. Entre os Wrappers, String é a classe mais custosa pra se trabalhar e por isso existe o Pool de Strings, por questão de performance.
Só não entendi o que você quis dizer na última frase. Independente do valor informado na instanciação de um Integer, você nunca conseguirá comparar valores usando ==.
Ah, e sobre o Pool de String, tem uma discussão bem interessante aqui.