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!!