0% acharam este documento útil (0 voto)
20 visualizações1 página

Entendendo hashCode e equals em Java

O hashCode é gerado pela classe Object e deve ser o mesmo para dados com o mesmo conteúdo, embora colisões possam ocorrer devido à limitação de 32 bits. Para comparar objetos, utiliza-se o hashCode para uma busca inicial e o método equals() para confirmar a igualdade. A comparação de referências é feita com '==' e a comparação de conteúdo deve ser feita com equals().
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações1 página

Entendendo hashCode e equals em Java

O hashCode é gerado pela classe Object e deve ser o mesmo para dados com o mesmo conteúdo, embora colisões possam ocorrer devido à limitação de 32 bits. Para comparar objetos, utiliza-se o hashCode para uma busca inicial e o método equals() para confirmar a igualdade. A comparação de referências é feita com '==' e a comparação de conteúdo deve ser feita com equals().
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

Para dados com o mesmo conteúdo, precisar ser gerado o mesmo hashCode.

Nunca gera
um diferente:

String nome1 = "Maria";


String nome2 = "Maria";
sout([Link]());
sout([Link]());

Esse número é gerado por uma função dentro da classe Object

Como o número inteiro é limitado a 32 bits, o hashCode gerado pode dá colisões,


ou seja, ter objetos diferentes que, por coincidência, geraram o mesmo hashCode.
Mas é difícil de acontecer.

Se você for encontra um objeto em uma lista enorme de elementos, você compara o
seu objeto com o objeto da lista, você faz essa comparação usando o hashCode, se em
algum momento o hashCode do objeto que você está buscando for igual ao elemento da
lista, você vai e confirma a igualdade com o método equals();

Exemplo:

Vamos comparar se um Cliente é igual ao outro com base no nome. Geraremos uma
implementação dos métodos equals e hashCode na classe Client. Para isso, aperte alt
+ inserct + equals() and hashCode e selecione os atributos que você quer comparar
os objetos (nome).

O equals recebe um Object como argumento

c1 == c2
- dá false porque o ==, com exceções de tipos com tratamentos especiais, como o
String, não compara o conteúdo dos objetos, mas sim as referências de memória. Como
dois objetos diferentes foram alocados no Heap, eles têm posições de memória
diferentes, por isso dá falso. A referência de memória deles são diferentes.

- Se fosse quiser comparar se dois objetos são iguais pelo seu conteúdo, você dá
preferência ao equals(). Se quiser comparar as referências dos objetos, utilize ==;

String s1 = "Test";
String s2 = "Test";

sout(s1 == s2); -> true;

-Dá true porque o compilador dá um tratamento especial com literais

String s1 = new String("Text");


String s2 = new String("Test");

sout(s1 == s2); -> false. Porque dois objetos diferentes foram criados.

Você também pode gostar