hashCode() e Equals()?[RESOLVIDO]

2 respostas
R

Bom dia,
gostaria de saber para que serve o “hashCode() e Equals()”, no mapeamento das tabelas.
Muito obrigado

2 Respostas

Lavieri

não sei de qual tabela vc esta falando heheh... mais vamos explicar o que esses 2 métodos fazem...

todo objeto criado dentro da maquina virtual, ganha um hashCode()... um número que o identifica, para vc poder referenciar o objeto, isso é usado para vc saber se os objetos são os mesmo...

toda vez que vc faz..... objeto1 == objeto2 .... ele verifica se objeto1.hashCode() == objeto2.hashCode();

portanto vamos explicar 1 pouco melhor, digamos que vc tenha a seguinte classe pessoa
public class Pessoa {  
   final String name;  
   
   public Pessoa(final String name) {  
      this.name = name;  
   }  
   
   public String getName() {  
      return name;  
   }
}

e que vc faça o seguinte para usar ela

Pessoa pessoa1 = new Pessoa("João");
Pessoa pessoa2 = new Pessoa("João");
Pessoa pessoa3 = new Pessoa("José");
Pessoa pessoa4 = pessoa1;
Pessoa pessoa5 = pessoa2;
Pessoa pessoa6 = pessoa3;

bom... apesar de pessoa1 e pessoa2 serem joão... quando vc fizer.... (pessoa1 == pessoa2) isso te retornará falso! ... pois os hashCode() deles serão diferente, pois eles são 2 objetos distinos para o sistema ....

porem se vc fizer.... (pessoa1 == pessoa4) isso retornará verdade... pois este 2 objetos são os mesmos, referenciam a mesma instancia de um objeto, com o mesmo hashCode...

para resolver o problema de saber c pessoa1 e pessoa2 serem a mesma pessoa, onde para nois so importaria o nome, para isso existe o méotod equals, por padrão... o método equals, faz o mesmo que verificar ==, ou seja... por padrão ele testa se os hashCode são iguais.... e se vc não prepar a classe Pessoa para tal, quando vc fizer (pessoa1.equals(pessoa2)) isso tb será falso...

então a solução é modificar a classe Pessoa assim
public class Pessoa {

   final String name;
 
   public Pessoa(final String name) {
      this.name = name;
   }

   public String getName() {
      return name;
   }

   /**
    * 2 pessoas serão igauis quando seus nomes são igauis
    */
   public boolean equals(Pessoa pessoa) {
      return (pessoa.getName().equals(this.name);
   }
}

pronto agora se vc fizer, pessoa1.equals(pessoa2) isso vai retornar true, pois seus nomes são iguais.

R

Valeu!!
Tirou a minha dúvida!

Criado 2 de fevereiro de 2009
Ultima resposta 2 de fev. de 2009
Respostas 2
Participantes 2