1
resposta

[Dúvida] Como então eu posso comparar os atributos dos objetos para dizer se eles são iguais ?

como eu posso comparar ojetos com referências de memória diferentes mas que são do mesmo tipo, afim de dizer se eles são iguais ou não a partir dos atributos ? Já ouvir falar disso usanso o equals e hashCode, mas não entendo como funciona.

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá Wellington! Tudo bem?

Para comparar objetos em Java com base em seus atributos, você deve usar os métodos equals e hashCode. Esses métodos são fundamentais quando você deseja verificar a igualdade lógica dos objetos, ou seja, se eles têm os mesmos valores de atributos, em vez de verificar se são o mesmo objeto na memória.

  1. equals: Este método é utilizado para comparar o conteúdo de dois objetos. Para isso, você precisa sobrescrever o método equals na sua classe. Aqui está um exemplo de como você pode fazer isso na classe Filme:

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Filme filme = (Filme) obj;
        return ano == filme.ano && titulo.equals(filme.titulo);
    }
    

    Neste exemplo, estamos comparando dois objetos Filme com base nos atributos titulo e ano.

  2. hashCode: Sempre que você sobrescrever o método equals, é uma boa prática também sobrescrever o método hashCode. Isso é importante para o funcionamento correto de coleções baseadas em hash, como HashMap ou HashSet. Aqui está um exemplo de como você pode implementar o hashCode:

    @Override
    public int hashCode() {
        return Objects.hash(titulo, ano);
    }
    

    O método Objects.hash é uma maneira conveniente de gerar um hash code baseado nos atributos relevantes do objeto.

Com esses métodos implementados, você pode comparar dois objetos Filme da seguinte forma:

Filme filme1 = new Filme("Avatar", 2009);
Filme filme2 = new Filme("Avatar", 2009);

if (filme1.equals(filme2)) {
    System.out.println("Iguais");
} else {
    System.out.println("Diferentes");
}

Neste caso, a saída será "Iguais", pois estamos comparando o conteúdo dos objetos, não suas referências de memória.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.