Bien vamos a continuar con esta elección de clase Object ahora lo que vamos a hacer es crear una nueva
clase sobre los packages.
Vamos a dar clic derecho neo Java class el nombre de la clase va a ser clase Object y la depositamos
en el paquete de test y damos siguen finalizar quitamos estos comentarios con controlé
ampliamos esta clase y vamos a crear un método main public void main tabulador y ahora vamos a crear
dos objetos de tipo empleado los cuales vamos a comparar utilizando un método que vamos a crear comparar
objetos así que vamos a crear dos variables empleado 1
le asignamos el valor de Juan y el sueldo de 10000
importamos esta clase y ahora
creamos otra variable llamada empleado 2 en 2 y de momento vamos a asignarle los mismos valores
pero debido a que estamos utilizando dos veces la palabra reservada Anneo.
Esto quiere decir que estos objetos se encuentran en diferente posición en memoria.
Vamos a comparar esto vamos a mandar a imprimir cada una de estas variables
así que mandamos imprimir el empleado 1 y el empleado 2 bien así que guardamos cambios y ejecutamos
y podemos observar qué nos está imprimiendo el empleado 1 y el empleado 2.
Sin embargo en este caso como los valores de los dos objetos contienen los mismos elementos es decir
el nombre de Juan y el suelo de 10 000 podemos observar que el valor de Skout se genera a partir de
los valores que contiene cada uno de los atributos del objeto en este caso del objeto empleado.
Por lo tanto el valor de Ascot es igual en ambos objetos.
Sin embargo en este punto cabe mencionar que esto no significa que sea la misma dirección de memoria.
Estos objetos son distintos cómo podemos comprobar esto.
Podemos comprobarlo de varias maneras la primera y más simple
es preguntando por la referencia de los objetos.
Vamos a preguntar si la variable 1 tiene la misma ubicación de memoria que el objeto 2 recordemos que
si estas variables apuntan a un objeto entonces el operador igual igual va a preguntar por la referencia
de estos objetos no por el contenido de los objetos así que guardamos cambios ejecutamos
y podemos observar que esta comprobación nos regresa falso.
Así que de esta manera podemos saber que no son iguales.
Estos objetos apuntan a diferentes referencias en memoria otra forma de saber si están apuntando a la
misma referencia ponemos un punto de ruptura damos clic derecho damos clic en Facebook File
presionamos F8 para que se cree este objeto el objeto 1 y entonces la variable en 1 apunta al objeto
en memoria podemos observar que en este caso el élide nos da el valor de 128 así que ese es el valor
que nos proporciona el líder.
Simplemente es una simplificación del valor de la referencia en memoria.
Ahora si creamos el segundo objeto presionamos F8 podemos observar que está apuntando a un diferente
lugar en memoria.
En este caso está apuntando al número 295 y por lo tanto cuando preguntamos si estos objetos apuntan
a la misma referencia en memoria podemos observar que eso nos va a regresar falso ya que los objetos
están apuntando a diferentes lugares memoria así que esa es otra forma de saber si tenemos la misma
referencia en memoria de un objeto o no y hay una tercera manera.
Esa tercer manera lo voy a agregar en este video pero no es necesario que ustedes lo realicen únicamente
para que puedan observar la referencia en memoria real de cada uno de los objetos.
Sin embargo esto podría ser diferente entre cada plataforma e incluso podría no funcionar así que solamente
voy a mostrar cómo hacerlo pero no es necesario que ustedes realicen estos pasos bien para saber la
referencia en memoria de un objeto.
Podemos utilizar una librería así que abrimos nuestro archivo de XML.
Vamos a agregar una librería más a nuestro proyecto para esto vamos a agregar el tag de dependencias
contra el espacio.
Para completar este Tag y posteriormente vamos a agregar una dependencia
el espacio para completar este tag de dependencia
vamos a agregar una etiqueta de GRUB Heydi y el nombre del proyecto se llama ORF Open JDK punto J O
L.
Ese es el nombre del proyecto que permite averiguar cuál es la referencia en memoria de un objeto.
Posteriormente agregamos el artefacto J O L en medio Kor y finalmente agregamos la versión en este caso
la versión más reciente es la 0.9 así que seleccionamos esta versión y para descargar esta librería
damos clic derecho sobre nuestro proyecto y hacemos clic cambio no debería haber ningún software que
detenga la descarga de este tipo de archivos.
De lo contrario primero hay que deshabilitar el software de seguridad y posteriormente hacer esta descarga
de esta librería.
Pero como les comento este paso es opcional ustedes no tienen que hacerlo solamente para que vean cuál
es la dirección en memoria de estos objetos.
Una vez que ya hemos importado esa librería entonces podemos agregar el siguiente código vamos a imprimir
la dirección de memoria del empleado 1 y para ello vamos a utilizar algunas clases del paquete que acabamos
de importar.
Utilizamos la clase B.M. de Virtual Machine posteriormente mandamos a llamar al método current podemos
observar que ya se importó en automático esta clase y posteriormente del método current.
Mandamos a llamar al método address of
y lo que recibe como parámetro es un objeto y nos regresa la referencia en memoria de este objeto así
que guardamos cambios ejecutamos
aunque nos marca este Guarne y vamos a ignorarlo ya que únicamente nos interesa el número de referencia
de este objeto y podemos observar que nos muestra el número de referencia que estamos observando con
terminación 32
y vamos a ser esto mismo para el objeto empleado dos
así que guardamos cambios y ejecutamos.
Ya estamos solicitando a la dirección de memoria del empleado 1 y la dirección de memoria del objeto
que está apuntando la variable empleado 2 guardamos cambios ejecutamos
y podemos observar la referencia en memoria.
En este caso y a cambio termina en 40 y en el segundo caso en el empleado 2 termina en 24 así que son
diferentes posiciones en memoria de cada uno de estos objetos.
Así que con esto podemos observar que el Método Scout que estábamos imprimiendo y que comentábamos anteriormente
que era la referencia en memoria realmente es el valor Skout generado para este objeto a partir de los
valores que contiene cada uno de sus atributos.
Por ello ahora podemos aclarar que este número es únicamente una referencia del objeto pero si contiene
los mismos valores que otro objeto entonces estos números de Jacob van a ser idénticos.
Por lo tanto tenemos que averiguar de otras maneras si realmente queremos saber cuál es la referencia
en memoria y así saber si están apuntando a la misma referencia en memoria pero siempre que utilicemos
la palabra reservada Niu entonces va a crear un nuevo objeto en memoria.
Por lo tanto esta simple comprobación para preguntar si los objetos apuntan a la misma referencia en
memoria puede sacarnos de duda.
No es necesario agregar este código ni tampoco la librería que utilizamos pero en este caso se lo segregamos
para que estén seguros de lo que está sucediendo con el compilador.
Ahora con esta librería es posible saber incluso más detalle acerca de cada uno de los elementos de
nuestro objeto.
Para ello vamos a hacer lo siguiente
Vamos a imprimir detalle del empleado 1 y para ello vamos a utilizar la clase Graph Layout mandamos
al método int y podemos ver que se importa en automático la clase Graph Layout del paquete que acabamos
de agregar a nuestro archivo post or open JDK.
J O L info le pasamos la referencia del objeto que queremos analizar y posteriormente mandamos a llamar.
El método Divol para que podamos observar el detalle de este objeto guardamos cambios y ejecutamos
y podemos observar el detalle del empleado 1 podemos ver que tenemos el nombre completamente calificado
de nuestra clase el nombre del paquete y el nombre de la clase.
Posteriormente el valor de Jacob y posteriormente nos muestra el detalle de cada uno de los elementos
internos de nuestra clase así que podemos observar la referencia en memoria del objeto empleado.
Esta es la referencia de memoria.
Posteriormente la referencia en memoria de nuestra variable string es decir el valor de nombre es la
referencia en memoria y finalmente el valor del atributo de sueldo y esa es la referencia en memoria
de este valor
ahora podemos hacer lo mismo para el empleado 2
imprimimos el detalle del empleado 2 y lo mandamos a imprimir.
Guardamos cambios y ejecutamos
y podemos elevar varias cosas interesantes por ejemplo en este caso estamos apuntando el objeto empleado
tienen esta dirección de memoria la cual es distinta a esta dirección en memoria del empleado 2.
Posteriormente el objeto string el atributo de string de nombre podemos observar que contiene exactamente
la misma referencia que la variable también de nombre Juan que hemos agregado en el empleado 2.
Esto se debe a que las cadenas debido a que no estamos utilizando la palabra reservada Nioh para asignar
un valor al atributo de nombre entonces se utiliza el concepto de string pull es decir que estas cadenas
se depositan en algún lugar de la memoria.
Es un lugar especial y una vez que encuentra esta misma cadena entonces reutiliza la misma dirección
en memoria siempre y cuando no se utilice la palabra reservada.
De lo contrario se van a utilizar diferentes direcciones de memoria pero como en este caso no estamos
utilizando la palabra reservada Niu entonces la dirección en memoria de este string va a ser el mismo
que este valor ya que contienen los mismos caracteres y lo mismo sucede con los tipos.
Integrar también se va a reutilizar los valores de estos objetos así que se encuentra el mismo valor
entero entonces se reserva un espacio en memoria para este valor y también se va a reutilizar siempre
y cuando no utilicemos la palabra reservada New para crear este valor de tipo entero que sería utilizando
realmente la clase integral.
Pero como ninguno de estos casos estamos utilizando internamente la palabra Niu entonces estas referencias
son las mismas.
Por lo tanto esta cadena de string Juan y esta cadena de 5 an apuntan a la misma referencia en memoria.
Vamos a comprobar esto y podemos observar que este atributo de nombre apunta a la referencia en memoria
6 2:45 22 F40 y este mismo atributo de nombre apunta exactamente a la misma dirección en memoria 62
45 22 F 40 y lo mismo sucede con el atributo de sueldo.
Podemos observar la dirección de memoria 62 45 22 F 58 y aquí tenemos exactamente el mismo valor para
el atributo de sueldo.
Así que con esto ya hemos comentado varias cosas de cómo se comportan realmente los objetos.
Una vez que podemos analizar la dirección en memoria de cada uno de estos objetos bien vamos a dejar
hasta aquí este vídeo y en el siguiente vídeo vamos a continuar analizando los métodos de la clase obvie
nos vemos en el siguiente vídeo.
Saludos.