Diferencia entre la igualdad de objetos y la igualdad de referencias en Java

La igualdad de objetos significa cuando dos objetos separados tienen los mismos valores/estado. Mientras que la igualdad de referencias significa cuando dos referencias de objetos apuntan al mismo objeto. El operador == se puede usar para verificar si dos referencias de objetos apuntan al mismo objeto. Para poder comparar dos objetos Java de la misma clase, la clase debe anular e implementar el método booleano equals(Object obj). El implementador decide qué valores deben ser iguales para considerar que dos objetos son iguales.

En Java, cuando se usa el operador “==” para comparar 2 objetos, verifica si los objetos se refieren al mismo lugar en la memoria. En otras palabras, verifica si los 2 nombres de objetos son básicamente referencias a la misma ubicación de memoria.

Java

import java.io.*;
  
String obj1 = new String("xyz");
String obj2 = obj1;
  
// now obj2 and obj1 reference the same place in memory
  
if (obj1 == obj2)
    System.out.println("obj1==obj2 is True");
else
    System.out.println("obj1==obj2 is False");

Producción:

obj1==obj2 is True

Tenga en cuenta en el código anterior que obj2 y obj1 hacen referencia al mismo lugar en la memoria debido a esta línea: «String obj2=obj1;». Y debido a que “==” compara la referencia de memoria para cada objeto, devolverá verdadero.

El método equals se define en la clase Object, de la cual cada clase es descendiente directa o indirecta. De forma predeterminada, el método equals() en realidad se comporta igual que el operador “==”, lo que significa que verifica si ambos objetos hacen referencia al mismo lugar en la memoria. Pero, el método equals en realidad está destinado a comparar el contenido de 2 objetos y no su ubicación en la memoria.

La clase Java String en realidad anula la implementación predeterminada de equals() en la clase Object, y anula el método para que solo verifique los valores de las strings, no sus ubicaciones en la memoria. Esto significa que si llama al método equals() para comparar 2 objetos String, siempre que la secuencia real de caracteres sea igual, ambos objetos se consideran iguales.

Java

import java.io.*;
  
String obj1 = new String("xyz");
String obj2 = new String("xyz");
  
if (obj1.equals(obj2))
    System.out.println("obj1==obj2 is True");
else
    System.out.println("obj1==obj2 is False");

Producción:

obj1==obj2 is True

Publicación traducida automáticamente

Artículo escrito por akshaysobti15 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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