Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Para saber más: variables y referencias

En Java, las referencias son como punteros a objetos en la memoria. Es decir, una variable de tipo objeto no contiene directamente el objeto, sino que guarda una referencia que apunta al lugar donde está almacenado en la memoria.

Cuando creo una instancia de un objeto, lo que realmente sucede es que se reserva un bloque de memoria para ese objeto, y la variable que uso actúa como una especie de "puerta de acceso" a esa memoria. Por ejemplo:

Pelicula pelicula1 = new Pelicula("Avatar", 2009);

Aquí, lo que hice fue crear un nuevo objeto de la clase Pelicula y guardar la referencia a ese objeto en la variable pelicula1.

Es importante tener en cuenta que una referencia no es el objeto en sí, solo nos da acceso a él. Si paso esa referencia a un método o la asigno a otra variable, no estoy duplicando el objeto, simplemente estoy copiando la dirección de memoria. Por ejemplo:

Pelicula pelicula1 = new Pelicula("Avatar", 2009);
Pelicula pelicula2 = new Pelicula("The Matrix", 1999);
Pelicula pelicula3 = pelicula1;

En este caso, solo existen dos objetos reales en memoria. La variable pelicula3 no crea un nuevo objeto, sino que simplemente apunta al mismo objeto que pelicula1.

Algo que siempre tomo en cuenta es que, al comparar objetos con ==, en realidad estoy comparando las referencias, no el contenido. Por ejemplo:

Pelicula pelicula1 = new Pelicula("Avatar", 2009);
Pelicula pelicula2 = new Pelicula("Avatar", 2009);

if (pelicula1 == pelicula2) {
    System.out.println("Iguales");
} else {
    System.out.println("Diferentes");
}

Aunque ambos objetos contienen la misma información, el resultado será "Diferente", porque están almacenados en lugares distintos de la memoria. Por eso, si lo que quiero es comparar el contenido, debo usar el método equals().

1 respuesta

Hola Alexis, espero que estés bien

¡Entiendo que estás explorando el concepto de variables y referencias en Java! Lo que has descrito es correcto y es un concepto fundamental cuando se trabaja con objetos en Java. Las referencias en Java funcionan como punteros que apuntan a la ubicación de un objeto en la memoria, y no al objeto en sí.

Cuando creas un objeto, como en tu ejemplo con Pelicula pelicula1 = new Pelicula("Avatar", 2009);, estás reservando un espacio en la memoria para ese objeto y pelicula1 es la referencia que te permite acceder a él. Esto significa que si asignas pelicula1 a otra variable, como pelicula3, ambas variables apuntarán al mismo objeto en la memoria.

Un punto crucial que mencionaste es la diferencia entre usar == y equals(). El operador == compara si dos referencias apuntan al mismo objeto, mientras que equals() se utiliza para comparar el contenido de los objetos, siempre y cuando la clase haya sobrescrito el método equals() adecuadamente.

Por ejemplo, si tienes dos objetos Pelicula con el mismo contenido, pero creados por separado, == dirá que son diferentes porque las referencias son distintas. Para comparar el contenido, deberías usar equals(), como en:

if (pelicula1.equals(pelicula2)) {
    System.out.println("Iguales");
} else {
    System.out.println("Diferentes");
}

Asegúrate de que la clase Pelicula tenga un método equals() bien implementado para que esta comparación funcione como esperas.

Espero que esta explicación te ayude a comprender mejor cómo funcionan las referencias y la comparación de objetos en Java. ¡Espero haber ayudado y buenos estudios!