2
respostas

Não entendi como que funciona o Equals e o Contains

Tem como mostra em um exemplo como que usar o Equals e o Contains.

2 respostas

O equals aponta quando um objeto é igual ao outro analisando os valores passados como um todo:

String nome = "a";
String nome2 = "b";

if(nome.equals(nome2){
faz algo;
}

Já o Contains verifica uma sequência de caracteres e retorna verdadeiro quando a string contém uma sequencia de valores especificados, podendo receber uma valor parcial:

String palavra = "java";
String letras = "ja";

if(palavra.contains(letra){
faz algo;
}

Boa tarde Jackson.

Quando criamos duas variáveis com instâncias de alguma classe, por exemplo:

 Integer x1 = new Integer(10);
 Integer x2 = new Integer(10);

São duas referências diferentes, logo quando utilizamos o operador == o java vai dizer que não são iguais, pois o == compara as referências, não o conteúdo do objeto.

Para comparar o conteúdo, precisamos reescrever o método equals. Obs: A classe Integer já reescreve esse método https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#equals(java.lang.Object)

Exemplo de uma classe ContaBanco:

public class ContaBanco {

    private int numeroDaConta;

    public ContaBanco(int numeroDaConta) {
        this.numeroDaConta = numeroDaConta;
    }

    public int getNumeroDaConta() {
        return numeroDaConta;
    }

    @Override
    public boolean equals(Object obj) {
        ContaBanco outraConta = (ContaBanco) obj;
        if (this.numeroDaConta == outraConta.getNumeroDaConta()) return true;
        return false;
    }
}

O contains( ) em lista funciona para verificar na Lista se possui determinado elemento. O java verifica na lista utilizando o método equals para comparar se o objeto passado existe na lista.

Exemplo de classe de teste:

import java.util.ArrayList;
import java.util.List;

public class TesteContaBanco {

    public static void main(String[] args) {

        ContaBanco contaBancoUm = new ContaBanco(10);
        ContaBanco contaBancoDois = new ContaBanco(10);

        if (contaBancoUm == contaBancoDois) {
            System.out.println("Referências são iguais");
        } else {
            System.out.println("Referências NÃO são iguais");
        }

        if (contaBancoUm.equals(contaBancoDois)) {
            System.out.println("Conteúdos são iguais");
        } else {
            System.out.println("Conteúdos NÃO são iguais");
        }

        List<ContaBanco> contas = new ArrayList<>();
        contas.add(contaBancoUm);
        contas.add(contaBancoDois);

        ContaBanco contaBancoTres = new ContaBanco(10);

        if (contas.contains(contaBancoUm)) {
            System.out.println("Conta existe na lista");
        } else {
            System.out.println("Conta NÃO existe na lista");
        }

        System.out.println("Quantidade de registros na lista: " + contas.size());

    }
}

Espero ter ajudado!