quarta-feira, 9 de maio de 2012

O método Equals

Ola pessoal!

Conforme solicitado hoje vou falar um pouco sobre o método equals do java.

Bom vamos ao que interessa.

O nome do método já diz tudo equals do inglês "igual", significa que serve para igualar ou comparar objetos, da especificação do java "Indica se algum outro objeto é "igual a" um presente." ou seja comparação entre objetos em memoria.

Existe varios pontos que devemos elencar:


O método equals implementa uma relação de equivalência em referências a objetos não nulos:
  • É reflexivo : para qualquer valor não nulo de referência x , deve retornar  true .
    • Exemplos:  x.equals(x) --> true
  • É simétrico : para qualquer valor não nulo de referência x e y ,  deve retornar true .
    • Exemplo: 
      • x.equals(y) --> true
      • y.equals(x)  --> true
  • É transitivo : para quaisquer valores não nulos de referência x , y , e z.
    • Exemplo:
      • se x.equals(y) --> true
      • e y.equals(z) --> true
      • então x.equals(z) --> true
  • É consistente : para qualquer valor não nulo de referência x e y , várias invocações de x.equals(y) consistentemente retornar true ou retornar sempre false, desde que nenhuma informação usada em equals comparações sobre os objetos seja modificado.
  • Para qualquer valor não nulo de referência x , retornar false .
    • Exemplo:
      •  x.equals(null) ou   x.equals(objeto nulo) --> false
O método equals para a classe Object implementa a mais exigente possível relação de equivalência em objetos, ou seja, para qualquer valor não nulo de referência x e y , este método retorna true se e somente se x e y se referem ao mesmo objeto ( x == y tem o valor true ).

Obs: note-se que geralmente é necessário sobrescrever também o método hashCode sempre que o método equals é sobrescrito, de modo a manter o contrato geral para o método hashCode , que afirma que os objectos iguais deve ter códigos de hash iguais, assunto para um proximo post.

Exemplos de codigos:

1
2
3
4
5
6
7
8
9
10
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (!super.equals(obj))
        return false;
    if (getClass() != obj.getClass())
        return false;
 
    ...
}





Nenhum comentário:

Contribua com este blog, doe qualquer quantia.