O método equals em java é usado para fazer comparação entre dois objetos. Com isso, vamos supor o seguinte exercício:

Crie um programa que cadastre pessoa com seu nome, idade e cpf. Depois de x cadastros, o usuário deve conseguir fazer uma busca das pessoas que ele cadastrou, pelo cpf.

1° passo – Criar a classe pessoa com um construtor e com getters e setters:

public class Pessoa {
  
  private String nome;
  private String cpf;
  private int idade;
  
  public Pessoa (String nome, String cpf, int idade) {
    this.nome = nome;
    this.cpf = cpf;
    this.idade = idade;
  }
  
  public String getNome() {
    return nome;
  }
  public void setNome(String nome) {
    this.nome = nome;
  }
  public String getCpf() {
    return cpf;
  }
  public void setCpf(String cpf) {
    this.cpf = cpf;
  }
  public int getIdade() {
    return idade;
  }
  public void setIdade(int idade) {
    this.idade = idade;
  }
}

2° passo – Criar uma classe com o método main() e dentro uma lista com alguns objetos Pessoa:

public class Principal {

  public static void main(String[] args) {
    
    Pessoa daniel = new Pessoa("Daniel","18000189728", 23);
    Pessoa carlos = new Pessoa("Carlos","42090460713", 45);
    Pessoa joana = new Pessoa("Joana","37216874638", 12);
    
    ArrayList listaPessoas = new ArrayList();
    listaPessoas.add(daniel);
    listaPessoas.add(carlos);
    listaPessoas.add(joana);
    
    System.out.println("Digite o cpf que deseja buscar: ");
    Scanner s = new Scanner(System.in);
    String cpfDigitado = s.nextLine();
    
    Pessoa p = new Pessoa(null, cpfDigitado, 0);
    
    if (listaPessoas.contains(p)) {
      System.out.println("Pessoa encontrada.");
    }else {
      System.out.println("A pessoa do cpf digitado não se encontra na lista.");
    }	
  }
}

Depois de criar um ArrayList com os objetos Pessoa, pedimos para que o usuário informe o cpf que deseja buscar. Com o cpf informado, instanciámos um novo Objeto do tipo Pessoa e chamamos de p. Então passamos como parametro, um nome = null, o cpf = cpfDigitado (cpf que foi informado pelo usuário) e uma idade = 0. Logo em seguida, verificamos se na lista de pessoas listaPessoas contem o objeto Pessoa p.

Agora a pergunta é: Como dizer para o método contains que ele deve procurar o objeto na lista por um atributo específico, nesse caso pelo cpf? A reposta se encontra no passo a seguir.

3° passo – Sobrescrevendo o método equals para comparar pelo cpf  (dentro da classe Pessoa) :

public class Pessoa {
  
  ...

  public boolean equals(Object obj) {
    if (obj instanceof Pessoa) {
      Pessoa qualquer = (Pessoa) obj;
      return this.cpf.equals(qualquer.getCpf());
    }else {
      return false;
    }
  }
}

Pronto, dessa maneira o equals foi sobrescrito a fim de realizar a comparação por um atributo específico do seu objeto. Sendo assim os métodos contains e indexOf passam a buscar o objeto pelo atributo especificado, já que esses métodos possuem o equals em sua implementação. No entanto nesse caso a comparação ficou amarrada a um único atributo, saiba como fazer para comparar objetos por mais de um atributo, ou então fazer uma busca em uma lista usando vários parâmetros.

Categorias: Orientação a Objetos

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Posts Relacionados

Orientação a Objetos

Comparando objetos por Dois Atributos em Java

Muitas vezes queremos comparar objetos em java mas não usando somente 1 atributo, como nome, cpf, placa … queremos que dois objetos sejam considerados iguais somente se ambos possuírem dois atributos semelhantes (nome e cpf, Leia mais…