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.
1 comentário
Luiz · 25/08/2019 às 21:26
Parabéns, explicação direta e simples!!