O equals é um método que compara se um objeto é igual a outro. Se você não sobrescrever, é usada a implementação padrão de Object, que é “um objeto é igual a outro caso seja a mesma instância na memória”. Caso precise de uma comparação mais detalhada, você deve sobrescrever o método a seu modo (por exemplo, dois objetos pessoas são iguais se tiverem o mesmo cpf). Lembrando que a relação de igualdade deve ser reflexiva, simétrica e transitiva.
O hashCode é um método que retorna um código hash de um objeto. Sempre que sobrescrever o equals, sobrescreva também o hashCode. Ele é usado normalmente para agilar a busca em collections.
Pessoal, tenho dúvidas também em relação ao método equals, alguém poderia me dar um exemplo de como fazer uma comparação entre dois valores inteiros de Arrays distintos, utilizando esse método?
int[] Vetor_1 = new int[3];
int[] Vetor_2 = new int[3];
Vetor_1[0] = 5;
Vetor_2[0] = 3; // Valores a serem comparados
Abraço
L
Lavieri
if (Vetor_1[0] == Vetor_2[0])
System.out.println("Iguais!");
V
ViniGodoy
Só complementando, essa obrigação existe porque a função de hashcode deve retornar valores iguais para objetos iguais (é para isso que ela serve).
Ou seja se:
a.equals(b);
Então
a.hashCode()==b.hashCode()
Note que o contrário pode não ser verdadeiro. Dois objetos de hashCode iguais não necessariamente são iguais, embora, numa boa função de hash isso será muito provável.
Quanto ao equals… testar com instanceOf pode quebrar uma das premissas do equals que diz:
Sea.equals(b)entãob.equals(a)
Portanto, isso recai numa implementação errada. Deixo como lição de casa para você achar um caso onde usando instanceof essa propriedade não valha.
D
Dil14
Lavieri:
if (Vetor_1[0] == Vetor_2[0])
System.out.println("Iguais!");
Só isso Lavieri?!
Fico ateh envergonhado.
Brigado,
Vlw!
L
Lavieri
valores primitivos são testado via == … ou seja… boolean, int, double, long, char, short … etc …
Objetos que precisam ser testaod via equals
D
Dil14
Lavieri:
valores primitivos são testado via == … ou seja… boolean, int, double, long, char, short … etc …
Objetos que precisam ser testaod via equals
Claro, claro - eh pq eu tava c a ideia do objeto Array na cabeça, q acabei me esquecendo dos tipos primitivos. :-o
Vlw!
W
wilson_sm
será que posso colocar mais uma dúvida aqui?
no caso eu estou fazendo comparações entre dois objetos:
Conta conta1 = new Conta();
conta1.nome = "Duke";
conta1.saldo = 1000.0;
Conta conta2 = new Conta();
conta2.nome = "Duke";
conta2.saldo = 1000.0;
eu sei que a comparação == entre os dois objetos não terá validade, acredito que teria que utilizar o método .equals
if(conta1.equals(conta2))System.out.println("Contas iguais");elseSystem.out.println("Contas não iguais");
porém fazendo dessa forma, não consigo o retorno [color=blue]true[/color].
Sei também que se fizer assim:
Conta conta1 = new Conta();
conta1.nome = "Duke";
conta1.saldo = 1000.0;
Conta conta2 = new Conta();
conta2=conta1;
o objeto conta2 é a mesma posição de conta1, e por isso q retorna valor [color=blue]true[/color].
agora que vem a questão: Qual a forma de comparar 2 objetos por completo? :wink: :wink:
R
regis_hideki
Se você quiser que duas contas sejam consideradas iguais se possuem mesmo dono e mesmo saldo (acho que o mais correto seria verificar pelo número da conta + número da agência + nome do banco), basta fazer um método que verifique essas condições, ou sobrescreva o equals.