Diferença entre == vs .equals() em Java | comparações

porLuis Augusto Moretto

Diferença entre == vs .equals() em Java | comparações

Programação orientada a objetos

Entenda o problema

O problema que vamos examinar hoje tem a ver com a comparação de valores em Java.

Este é um problema de linguagem agnóstica. Toda linguagem tem seu próprio jeito de lidar com valores e referências de objetos.

Comparando objetos em Java == ou .equals?

Em geral, ambos os operadores .equals() e “==” em Java são usados para verificar a igualdade. Aqui estão algumas das diferenças entre os dois:

  1. Um é um método e o outro é um operador.
  2. Podemos usar operadores == para comparação de referência (comparação do endereço de memória) e método para comparação de conteúdo ou valor (String) . Em palavras simples, == verifica se ambos os objetos apontam para a mesma localização de memória. O .equals() avalia a comparação de valores nos objetos.
  3. Se uma classe não substituir o método equals , então, por padrão, ele usa o método equals (Object o) da classe pai mais próxima que substituiu esse método. – Override 

Operador ==

Este é o principal operador de igualdade em Java. Para resumir, esse método compara as referências da esquerda e da mão direita com a outra e retorna booleano. 

Isso significa que este operador retorna verdadeiro se as variáveis esquerda e direita apontarem para o mesmo objeto na memória. 

Como na maioria das comparações de classes, esses operadores são desencorajados a usar se você não estiver realmente interessado em verificar se duas variáveis apontam para o mesmo objeto.

Exemplo de codificação:

// Uso do operador == vs método equals
public class Test {
    public static void main(String[] args)
    {
        String s1 = new String("HELLO");
        String s2 = new String("HELLO");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

Saída:

falso
verdade

Explicação

Aqui estamos criando dois objetos, ou seja, s1 e s2. S1 e s2 referem-se a objetos diferentes.

Quando usamos o operador == para comparação s1 e s2, o resultado é falso, pois ambos têm endereços diferentes na memória.

Usando o método, o resultado é verdadeiro porque só compara os valores (String) dados em s1 e s2.