Fiquei com algumas dúvida sobre o hashcode dos objetos se alguém puder me esclarecer agradeço muito, Se tenho uma classe aleatória chamada Fila, caso eu não sobreescreva o metodo toString, por padrão usará a da classe Object que na implementação
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
No final dela depois do @ concatena uma string usando ali o hashCode
Primeira dúvida, se eu instancio um objeto do tipo Fila guardando na variável f e dou um print em f o resultado é: memoria.entities.Fila@1b6d3586 Certo, como esperado getClass().getName() nome da classe, string do @ e o hashcode, agora se eu utilizo f.hashcode() o resultado é: 460141958
Não deveria ser1b6d3586 ?
Segunda dúvida, por que o hashcode deve ser sobreescrito e ter uma padronização, entendi que é organizar os objetos por uma caracteristica por exemplo em um sistema bancário onde tem uma classe Conta com atributo inteiro numero, o hashcode poderia ser o proprio atributo numero, ou este atributo multiplicado por outro inteiro, gostaria de entender melhor o proposito disso, a principio estava achando que nós comparavamos os objetos pelo hashcode, mas entrei nas implementações da classe Integer e String e percebi que o hashcode não tem nada a ver na hora da implementação do equals, inclusive nas minhas proprias classes consegui implementar o equals sem o hashcode.
Obrigado.