in

Anulación del método de igualdad en Java

gfg 200x200 min

Considere el siguiente programa Java:

Java

class Complex {

    private double re, im;   

    

    public Complex(double re, double im) {

        this.re = re;

        this.im = im;

    }

}

public class Main {

    public static void main(String[] args) {

        Complex c1 = new Complex(10, 15);

        Complex c2 = new Complex(10, 15);

        if (c1 == c2) {

            System.out.println("Equal ");

        } else {

            System.out.println("Not Equal ");

        }

    }

}

Producción:

Not Equal 

La razón para imprimir “No igual” es simple: cuando comparamos c1 y c2, se comprueba si tanto c1 como c2 se refieren al mismo objeto o no (las variables de objeto son siempre referencias en Java). c1 y c2 se refieren a dos objetos diferentes, por lo tanto, el valor (c1 == c2) es falso. Si creamos otra referencia, digamos c3 como sigue, entonces (c1 == c3) dará verdadero.

Entonces, ¿cómo verificamos la igualdad de valores dentro de los objetos? Todas las clases en Java heredan de la clase Object, directa o indirectamente (Ver punto 1 de este). los Clase de objeto tiene algunos métodos básicos como clone (), toString (), equals (), .. etc. Podemos anular el método equals en nuestra clase para verificar si dos objetos tienen los mismos datos o no.

Java

class Complex {

    private double re, im;

    public Complex(double re, double im) {

        this.re = re;

        this.im = im;

    }

    

    @Override

    public boolean equals(Object o) {

        

        if (o == this) {

            return true;

        }

        

          

        if (!(o instanceof Complex)) {

            return false;

        }

        

        

        Complex c = (Complex) o;

        

        

        return Double.compare(re, c.re) == 0

                && Double.compare(im, c.im) == 0;

    }

}

public class Main {

    public static void main(String[] args) {

        Complex c1 = new Complex(10, 15);

        Complex c2 = new Complex(10, 15);

        if (c1.equals(c2)) {

            System.out.println("Equal ");

        } else {

            System.out.println("Not Equal ");

        }

    }

}

Producción:

Equal 

Como nota al margen, cuando anulamos equals (), se recomienda anular también el método hashCode (). Si no lo hacemos, los objetos iguales pueden obtener diferentes valores hash; y las colecciones basadas en hash, incluidos HashMap, HashSet y Hashtable, no funcionan correctamente (consulte esta para más detalles). Cubriremos más sobre hashCode () en una publicación separada.
Referencias:
Segunda edición de Java eficaz
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Hazte con todo lo importante Fundación Java y conceptos de colecciones con el Curso de Fundamentos de Java y Colecciones de Java a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

Deja una respuesta

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

apple touch icon@2

pip – ¿Cómo instalo un paquete de Python con un archivo .whl?

Fitbit vs Jawbone: diferencia y comparación