Igualdade entre Objetos

Todos os objetos são "objects" e possuem acesso ao .equals, e sempre que compararmos, dará false. Pois possuirão objetos de memória diferentes.

Teremos que "criar" nosso próprio equals, contendo um hashCode.

hashCode é um código específico gerado pela linguagem para cada objeto. Se os objetos são iguais... em tese o hashCode será igual também.

Então dentro da Classe criaremos um método equals and HashCode, e poderemos escolher qual o critério a ser usado. Se quer comparar Id com Id, Username com Username e por aí vai.

Atualizado