Saltar al contenido

¿Cuál es la diferencia entre == y equals () en Java?

Solución:

En general, la respuesta a su pregunta es “sí”, pero …

  • .equals(...) Solo compararé lo que está escrito para comparar, ni más ni menos.
  • Si una clase no anula el método equals, entonces toma el valor predeterminado equals(Object o) método de la clase principal más cercana que ha anulado este método.
  • Si ninguna clase principal ha proporcionado una anulación, entonces el método predeterminado es el de la última clase principal, Objeto, y por lo tanto, se queda con el Object#equals(Object o) método. Según la API de objetos, esto es lo mismo que ==; es decir, devuelve verdadero si y solo si ambas variables se refieren al mismo objeto, si sus referencias son una y la misma. Por lo tanto, estarás probando igualdad de objeto y no igualdad funcional.
  • Recuerde siempre anular hashCode si anula equals para no “romper el contrato”. Según la API, el resultado devuelto por el hashCode() método para dos objetos debe ser el mismo si su equals Los métodos muestran que son equivalentes. Lo contrario es no necesariamente cierto.

Con respecto a la clase String:

Los iguales () método compara el “valor” dentro de las instancias de String (en el montón) independientemente de si las dos referencias de objeto se refieren a la misma instancia de String o no. Si dos referencias de objetos de tipo String se refieren a la misma instancia de String, ¡genial! Si las dos referencias de objeto se refieren a dos instancias de String diferentes … no hace ninguna diferencia. Es el “valor” (es decir: el contenido de la matriz de caracteres) dentro de cada instancia de String que se está comparando.

Por otro lado, el “==” operador compara el valor de dos referencias de objeto para ver si se refieren a lo mismo Instancia de cadena. Si el valor de ambas referencias de objeto “se refiere” a la misma instancia de String, entonces el resultado de la expresión booleana sería “verdadero” … duh. Si, por el contrario, el valor de ambas referencias de objeto “se refieren a” diferentes instancias de String (aunque ambas instancias de String tienen “valores” idénticos, es decir, el contenido de las matrices de caracteres de cada instancia de String es el mismo), el resultado de la expresión booleana sería “falso”.

Al igual que con cualquier explicación, déjelo asimilar.

Espero que esto aclare las cosas un poco.

Hay algunas pequeñas diferencias dependiendo de si se trata de “primitivos” o de “tipos de objeto”; se puede decir lo mismo si se habla de miembros “estáticos” o “no estáticos”; también puedes mezclar todo lo anterior …

Aquí hay un ejemplo (puede ejecutarlo):

public final class MyEqualityTest
{
    public static void main( String args[] )
    {
        String s1 = new String( "Test" );
        String s2 = new String( "Test" );

        System.out.println( "n1 - PRIMITIVES ");
        System.out.println( s1 == s2 ); // false
        System.out.println( s1.equals( s2 )); // true

        A a1 = new A();
        A a2 = new A();

        System.out.println( "n2 - OBJECT TYPES / STATIC VARIABLE" );
        System.out.println( a1 == a2 ); // false
        System.out.println( a1.s == a2.s ); // true
        System.out.println( a1.s.equals( a2.s ) ); // true

        B b1 = new B();
        B b2 = new B();

        System.out.println( "n3 - OBJECT TYPES / NON-STATIC VARIABLE" );
        System.out.println( b1 == b2 ); // false
        System.out.println( b1.getS() == b2.getS() ); // false
        System.out.println( b1.getS().equals( b2.getS() ) ); // true
    }
}

final class A
{
    // static
    public static String s;
    A()
    {
        this.s = new String( "aTest" );
    }
}

final class B
{
    private String s;
    B()
    {
        this.s = new String( "aTest" );
    }

    public String getS()
    {
        return s;
    }

}

Puede comparar las explicaciones para “==” (Operador de igualdad) y “.equals (…)” (método en la clase java.lang.Object) a través de estos enlaces:

  • ==: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
  • .equals (…): http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *