Bom dia,
gostaria de saber para que serve o “hashCode() e Equals()”, no mapeamento das tabelas.
Muito obrigado
hashCode() e Equals()?[RESOLVIDO]
2 Respostas
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 pessoapublic 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 assimpublic 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.
Valeu!!
Tirou a minha dúvida!