in

Cómo comparar dos objetos en Java

Objeto Java class es la superclase de todas las clases de Java. Todas las clases de Java implementan la clase Object de forma predeterminada. La clase Java Object proporciona los dos métodos importantes para comparar dos objetos en Java, es decir es igual a () y código hash() método. En esta sección, aprenderemos cómo es igual a () y código hash() el método funciona. Junto con esto, también aprenderemos cómo comparar dos objetos en Java con ejemplos adecuados.

Java proporciona los dos métodos de la clase Object para comparar los objetos que son los siguientes:

  • Método Java equals ()
  • Método Java hashCode ()

Método Java equals ()

los es igual a () El método de la clase Object compara la igualdad de dos objetos. Los dos objetos serán iguales si comparten la misma dirección de memoria.

Sintaxis:

El método analiza un objeto de referencia como parámetro. Devuelve verdadero si los objetos son iguales, de lo contrario devuelve falso.

También es posible que un objeto sea igual a otro objeto dado, entonces el método equals () sigue el relación de equivalencia para comparar los objetos.

  • Reflexivo: Si X es una referencia no nula, la llamada de x.equals (x) debe devolver verdadero.
  • Simétrico: Si las dos referencias no nulas son X y y, x.equals (y) volverá cierto si y solo si y.equals (x) regreso cierto.
  • Transitivo: Si las tres referencias no nulas son x, y, y z, x. es igual a (z) también regresará cierto si x.equals (y) y y.equals (z) ambos retornos cierto.
  • Consistente: Si las dos referencias no nulas son X y y, la vocación múltiple de x.equals (y) devuelve constantemente verdadero o falso. No proporciona ninguna información utilizada en la comparación.
  • Para cualquier referencia no nula x, x.equals (nulo) devuelve falso.

En resumen, para cualquier referencia no nula, diga X y y, devuelve verdadero si y solo si ambas referencias se refieren al mismo objeto.

Recordar: Cuando anulamos el método equals (), es necesario anular el método hashCode (). La anulación sigue la convención para el método hashCode () que establece que el objeto igual debe tener el mismo código hash.

Ejemplo de método equals ()

En el siguiente ejemplo, hemos creado el constructor del Doble y Largo class y pasa los valores correspondientes, como un argumento que almacena en sus objetos, respectivamente.

Después de eso, en la primera declaración println, hemos invocado el método equals () y analizamos un objeto y como parámetro que compara el objeto x e y. Vuelve falso porque x tiene el valor doble e y tiene el valor largo que no es igual.

De manera similar, en la segunda instrucción println, hemos invocado el método equals () y analizamos el mismo valor que en el constructor de la clase Double. Vuelve cierto porque el objeto de clase doble, es decir, x tiene el mismo valor que hemos pasado en el método equals ().

ObjectComparisonExample.java

Producción:

Objects are not equal, hence it returns false
Objects are equal, hence it returns true

Diferencia entre == Operador y método equals ()

En Java, el == El operador compara que dos referencias son idénticas o no. Mientras que el es igual a () El método compara dos objetos.

Los objetos son igual cuando tienen el mismo estado (generalmente comparando variables). Los objetos son idéntico cuando comparten la identidad de clase.

Por ejemplo, la expresión obj1 == obj2 prueba la identidad, no la igualdad. Mientras que la expresion obj1.equals (obj2) compara la igualdad.

Método Java hashCode ()

En Java, el código hash es un valor entero con signo de 32 bits. Es una identificación única proporcionada por JVM al objeto Java. Cada objeto Java está asociado con el código hash. El código hash se administra mediante una estructura de datos basada en hash, como HashTable, HashSet, etc.

Recordar: Cuando anulamos el método equals (), también es necesario anular el método hashCode ().

Sintaxis:

Devuelve un valor de código hash generado aleatoriamente del objeto que es único para cada instancia. El valor generado aleatoriamente puede cambiar durante las diversas ejecuciones del programa.

El contrato general de hashCode es:

  • Cuando se invoca más de una vez durante la ejecución de una aplicación, el método hashCode () devolverá consistentemente el mismo código hash (valor entero). Tenga en cuenta que el objeto no debe modificarse.
  • Si los dos objetos son iguales según el método equals (), la invocación del método hashCode () en estos dos objetos debe producir el mismo valor entero.
  • No es necesario que si los dos objetos no son iguales según el método equals (), invocar el método hashCode () en estos dos objetos puede producir un valor entero distinto. Significa que puede producir el mismo código hash para ambos objetos.

Ejemplo de método hashCode ()

En el siguiente ejemplo, hemos creado dos clases Employee.java y HashCodeExample.java.

En la clase Empleado, hemos definido dos campos regno de tipo int y nombre de tipo String. Después de eso, hemos creado un constructor de la clase Empleado y pasamos estos dos campos como parámetro.

Para realizar la comparación de objetos, hemos creado una clase separada llamada HashCodeEjemplo. En esta clase, hemos creado dos instancias de la clase Empleado, es decir emp1 y emp2. Después de eso, hemos invocado el método hashCode () usando objetos. Hemos almacenado el valor del código hash en la variable. a y B, respectivamente.

Employee.java

HashCodeExample.java

Producción:

hashcode of emp1 = 2398801145
hashcode of emp2 = 1852349007
Comparing objects emp1 and emp2 = false

Anulación del método equals ()

Podemos anular el método equals () de la siguiente manera si queremos proporcionar una implementación propia.

El fragmento de código anterior muestra que dos empleados serán iguales si están almacenados en la misma dirección de memoria o tienen el mismo regno. Cuando ejecutamos el programa (HashCodeExample.java) con el fragmento de código anterior, obtenemos el siguiente resultado.

Producción:

hashcode of emp1 = 2032578917
hashcode of emp2 = 1531485190
Comparing objects emp1 and emp2 = true

Deja una respuesta

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

Método JavaScript String toUpperCase ()

scala

Tutorial de Scala