GeeksforGeeks

En general, tanto equals() como el operador «==» en Java se utilizan para comparar objetos para comprobar la igualdad, pero aquí están algunas de las diferencias entre los dos:

  1. La principal diferencia entre el método .equals() y el operador == es que uno es método y el otro es operador.
  2. Podemos utilizar los operadores == para la comparación de referencias (comparación de direcciones) y el método .equals() para la comparación de contenidos. En palabras simples, == comprueba si ambos objetos apuntan a la misma ubicación de memoria mientras que .equals() evalúa la comparación de valores en los objetos.
  3. Si una clase no anula el método equals, entonces por defecto utiliza el método equals(Object o) de la clase padre más cercana que haya anulado este método. Ver esto para el detalle
  4. Ejemplo de codificación:

    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));
    }
    }

    
    

    
    

    Salida:

    falsetrue

    Explicación: Aquí estamos creando dos objetos a saber s1 y s2.

    • Tanto s1 como s2 se refieren a objetos diferentes.
    • Cuando utilizamos el operador == para la comparación de s1 y s2 entonces el resultado es falso ya que ambos tienen diferentes direcciones en la memoria.
    • Usando iguales, el resultado es verdadero porque sólo se comparan los valores dados en s1 y s2.

Entendamos ambos operadores en detalle:

Operador de igualdad(==)

Podemos aplicar operadores de igualdad para todos los tipos primitivos incluyendo el tipo booleano. también podemos aplicar operadores de igualdad para tipos de objetos.

class Test {
public static void main(String args)
{
System.out.println(10 == 20);
System.out.println('a' == 'b');
System.out.println('a' == 97.0);
System.out.println(true == true);
}
}



Salida:

falsefalsetruetrue

Si aplicamos == para los tipos de objetos entonces, debe haber compatibilidad entre los tipos de argumentos (ya sea hijo a padre o padre a hijo o mismo tipo). De lo contrario, obtendremos un error en tiempo de compilación.

class Test {
public static void main(String args)
{
Thread t = new Thread();
Object o = new Object();
String s = new String("GEEKS");
System.out.println(t == o);
System.out.println(o == s);
System.out.println(t==s);
}
}



Salida:

falsefalse// error: incomparable types: Thread and String

.equals()

En Java, el método string equals() compara las dos cadenas dadas basándose en los datos/contenido de la cadena. Si todos los contenidos de ambas cadenas son iguales entonces devuelve true. Si todos los caracteres no coinciden entonces devuelve false.

public class Test {
public static void main(String args)
{
Thread t1 = new Thread();
Thread t2 = new Thread();
Thread t3 = t1;
String s1 = new String("GEEKS");
String s2 = new String("GEEKS");
System.out.println(t1 == t3);
System.out.println(t1 == t2);
System.out.println(s1 == s2);
System.out.println(t1.equals(t2));
System.out.println(s1.equals(s2));
}
}



Salida:

truefalsefalsefalsetrue

Explicación: Aquí estamos utilizando el método .Equals para comprobar si dos objetos contienen los mismos datos o no.

  • En el ejemplo anterior, estamos creando 3 objetos Thread y 2 objetos String.
  • En la primera comparación, estamos comprobando si t1 == t3 o no. Como sabemos que tanto t1 como t3 apuntan al mismo objeto por eso devuelve true.
  • En la segunda comparación, estamos utilizando el operador «==» para comparar los objetos de cadena y no el contenido de los objetos. Aquí, ambos objetos son diferentes y por lo tanto el resultado de esta comparación es «False»
  • Cuando estamos comparando 2 objetos String por el operador .equals() entonces estamos comprobando que es ambos objetos contienen los mismos datos o no.
  • Ambos objetos contienen la misma cadena, es decir, GEEKS, por lo que devuelve true.

Este artículo ha sido escrito por Bishal Kumar Dubey. Si te gusta GeeksforGeeks y quieres contribuir, también puedes escribir un artículo en contribute.geeksforgeeks.org o enviar tu artículo por correo a [email protected]. Verás cómo tu artículo aparece en la página principal de GeeksforGeeks y ayudarás a otros Geeks.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.