logo

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 Objeto de forma predeterminada. La clase Java Object proporciona los dos métodos importantes para comparar dos objetos en java , es decir. es igual() y código hash() método. En esta sección aprenderemos cómo es igual() 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 igual()
  • Método Java hashCode()

Método Java igual()

El es igual() 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:

 public boolean equals(Object obj) 

El método analiza un objeto de referencia como parámetro. Devuelve verdadero si los objetos son iguales; en caso 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.

vacío 0
    Reflexivo:Si X es una referencia no nula, la llamada de x.es igual a(x) debe devolver verdadero.Simétrico:Si las dos referencias no nulas son X y y, x.es igual a(y) regresará verdadero si y solo si y.es igual a(x) devolver verdadero .Transitivo:Si las tres referencias no nulas son x, y , y z, x.equals(z) también regresará verdadero si x.igual(y ) y y.igual(z) ambas devoluciones verdadero .Coherente:Si las dos referencias no nulas son X y y , el llamado múltiple de x.igual(y) constantemente devuelve 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, digamos X y y , devuelve verdadero si y sólo si ambas referencias hacen referencia 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 igual()

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

Después de eso, en la primera declaración println, invocamos el método igual () y analizamos un objeto y como un 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 declaración println, invocamos el método equals() y analizamos el mismo valor que en el constructor de la clase Double. Vuelve verdadero porque el objeto de clase doble, es decir, x, tiene el mismo valor que hemos pasado en el método equals().

ObjectComparisonExample.java

descargar turbo c++
 public class ObjectComparisonExample { public static void main(String[] args) { //creating constructor of the Double class Double x = new Double(123.45555); //creating constructor of the Long class Long y = new Long(9887544); //invoking the equals() method System.out.println('Objects are not equal, hence it returns ' + x.equals(y)); System.out.println('Objects are equal, hence it returns ' + x.equals(123.45555)); } } 

Producción:

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

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

En Java , el == El operador compara si dos referencias son idénticas o no. Mientras que el es igual() 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 expresión 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 gestiona 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:

 public int hashCode() 

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

conjunto vs mapa

El contrato general para 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(), entonces invocar el 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 pueda 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, creamos 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 Ejemplo de código hash . 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

 public class Employee { private int regno; private String name; //constructor of Employee class public Employee(int regno, String name) { this.name = name; this.regno = regno; } public int getRegno() { return regno; } public void setRegno(int Regno) { this.regno = regno; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

HashCodeExample.java

 public class HashcodeExample { public static void main(String[] args) { //creating two instances of the Employee class Employee emp1 = new Employee(918, 'Maria'); Employee emp2 = new Employee(918, 'Maria'); //invoking hashCode() method int a=emp1.hashCode(); int b=emp2.hashCode(); System.out.println('hashcode of emp1 = ' + a); System.out.println('hashcode of emp2 = ' + b); System.out.println('Comparing objects emp1 and emp2 = ' + emp1.equals(emp2)); } } 

Producción:

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

Anular el método igual ()

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

¿Qué es el conjunto de hash de Java?
 //overriding equals() method @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; return this.getRegno() == ((Employee) obj). getRegno(); } 

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 si 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