Acredito que os Wrappers não lidam com números da mesma forma… acho que quando vc transforma um número em um tipo Empacotador, cada um trata o Nº de uma forma diferente, logo um Integer nunca será igual à um Long… Mas não sei se é realmente isso… sua dúvida virou a minha tbm !!!
Abraços 8)
LPJava
simples tipos diferentes… vc ta testando o valor de dois objetos porem de tipos diferentes ele sempre vai retornar false… experimente testar de mesmo tipo… para ver… a regra é clara… vc so pode testar objetos de mesmo tipos para q seja true…
flw!!!
maquiavelbona
Aproveitando a resposta do colega nbluis e tentando responder ao adriano_si, o método equals() verifica se é verdadeiro nessa ordem:
Os objetos são da mesma classe? Um número inteiro não é um número longo. Analogia estúpida? Um lápis não é igual a uma caneta, mesmo os dois escrevendo da mesma forma. Mas um lápis HB é da mesma forma de um lápis 6B (o que o tornaria verdadeiro) , o que muda é o conteúdo ( o que o torna falso pelo próximo passo);
O conteúdo é o mesmo? É meio óbvio, mas 4 não é 6, portanto os conteúdos devem ser continentemente iguais.
Se ambas as cláusulas forem verdadeiras, retorna verdadeiro.
Poderia fazer analogia com frutas, calçados etc, mas preferi objetos comuns.
Teste e veja os resultados. Um pouco de empirismo não faz mal a ninguém.
Até!
Guilherme_Gomes
As duas dão true! Axo que se alguma desse false eu postaria alguma duvida, hehehehe!
adriano_si
Valew, minha dúvida esclarecida…
maquiavelbona
Tinham que dar true pois:
1o caso: i e i2 são variáveis de referência a objetos diferentes, mas da mesma instância e com mesmo conteúdo, portanto atendem a demanda do equals.
2o caso: i e o são variáveis de referência diferentes que apontam para o mesmo objeto, portanto eles seriam iguais até numa comparação direta ( == ).