Hola te saluda nuevamente Ubaldo Acosta.
Espero que estén listos para comenzar con esta elección.
Vamos a estudiar a continuación el tema de paso de valor y referencia en IAVA están listos.
Vamos
paso por valor.
Hasta ahora hemos utilizado tipos primitivos para enviar valores a nuestros métodos.
Esto se conoce como paso por valor ya que como vimos en elecciones anteriores solo estamos copiando
el valor del tipo primitivo pero cada variable contiene su propia copia.
Por ejemplo en el código mostrado podemos observar un ejemplo de paso por valor también conocido como
valores de tipo primitivo lo que observamos en el Código es que al crear una variable en este caso la
variable X y al asignarle un valor por ejemplo el valor de 10 esta variable al ser modificada en otro
método su valor original no se ve modificado ya que solamente pasó una copia de su valor original la
manera de cambiar el valor de la variable X sería cambiándolo dentro del mismo método.
En este caso el método main sin embargo en este ejemplo el método llamado Cambiar valor intenta realizar
un cambio a la variable X pero como está fuera del alcance de este método acceder a esta variable x
no es posible únicamente puede cambiar el valor de su propia variable local.
En este caso la variable y al cambiar este valor en la variable y no afecta el valor de la variable
X así que como podemos observar el valor de la variable y si cambió el valor de la variable x no cambia.
De esta manera podemos observar que el valor de x únicamente manda una copia a la variable y al modificarse
el valor de la variable y solamente se modifica la variable el valor de la variable pero no se afecta
el valor de la variable X ya que únicamente se mandó una copia.
A esto se le conoce como paso por valor o copia del valor de la variable paso por referencia además
del paso por valores.
En Java tenemos el paso por referencia.
Esto básicamente lo utilizaremos o lo aplicaremos cuando mandemos objetos como parámetros a los métodos
en lugar de utilizar tipos primitivos.
Al utilizar un objeto como parámetro y enviarlo a un argumento de un método lo que estamos haciendo
es enviando la referencia del objeto que se está deseando utilizar.
Y en lugar de utilizar una copia del valor del objeto lo que realmente estamos haciendo es pasar la
referencia del objeto mismo con la finalidad de modificarlo directamente en el método que recibe este
argumento.
Esta referencia sin necesidad de crear una copia del objeto veamos como es esto definimos por ejemplo
un objeto de tipo persona con sus variables respectivas se crea en memoria en la posición indicada por
ejemplo 0 x 3 3 3 y por otro lado tenemos las variables locales una variable que se llame P la cual
está apuntando al objeto persona y por ello contienen la referencia del objeto pero también podemos
crear un argumento u otra variable que reciba como parámetro esta misma referencia del objeto persona
y por tanto también apuntarían al objeto persona
y podemos observar a continuación un extracto de este código.
Podemos observar que la variable P Cuando se crea apunta al objeto persona pero también el argumento
apunta al mismo objeto persona así que de alguna manera eso también funciona como una copia.
Sin embargo la copia del valor es la referencia donde está ubicado el objeto y por lo tanto la variable
ya sea P o la variable ARG pueden acceder directamente a los atributos y propiedades del objeto persona
al cual estén apuntando así que si revisamos este código podemos observar que estamos creando una variable
persona y al momento de crear el objeto o persona se crea el objeto persona.
Posteriormente se asigna la referencia donde se encuentra este objeto a la variable P Y en este caso
la variable P apunta al objeto persona podemos hacer algún cambio a este objeto e imprimimos el valor
en este caso el valor del nombre del objeto imprimiría el valor de Juan pero si mandamos a llamar el
método modificã persona lo que estamos haciendo es pasar como argumento.
La variable P Y quién recibiría esta dirección de memoria sería la variable.
Así que lo que se está copiando es una referencia y por lo tanto se dice que es un paso por referencia.
De esta manera la variable modifica persona puede acceder también directamente al objeto persona utilizando
los atributos o métodos del objeto al cual está apuntando y por lo tanto por ejemplo modificar el nombre.
En este caso utilizando el método cambiar nombre y de esta manera es que tanto la variable P como la
variable AR están modificando el mismo objeto y en este caso cambiaría el nombre a Carlos como siguiente
paso se imprimiría el nombre de la persona y en este caso imprimiría Carlos podemos observar que es
a través de la variable P que estamos haciendo la impresión del nombre y ya no estamos utilizando la
variable Art ya que ésta quedaría fuera del alcance de este método main ya que estamos en diferentes
métodos.
Por un lado la variable P está definida dentro del método main y la variable AR Está definida dentro
del método modificar persona así que cada una de las variables son locales y pertenecen únicamente al
método en el cual se está definiendo esto ya lo revisamos en elecciones anteriores pero debido a que
estamos haciendo el paso de una referencia entre objetos es que podemos seguir accediendo al mismo objeto
y ver las modificaciones que se hicieron desde otros métodos.
Así que esto se conoce como paso por referencia en Java.
Imaginemos un objeto que contiene 50 atributos o más si se va a realizar una copia del objeto cada vez
que lo asignemos a otra variable lo que estaríamos generando realmente es una copia de estos 50 valores.
Por ello cuando trabajamos con objetos lo que estamos enviando realmente a los argumentos de un método
solamente es la copia del valor de la referencia donde se encuentra ese objeto de tal manera que podemos
modificar directamente el objeto dentro del método que está recibiendo esta referencia ya sea desde
la variable original que apunta al objeto o desde la variable local que funciona como argumento en la
llamada del método.
En este caso la variable hará así que en el código mostrado podemos observar la variable P de tipo persona.
Esta es la misma clase con la que hemos trabajado en ejercicios anteriores pero básicamente tienen un
atributo llamado nombre de tipo string así que lo que podemos observar es que se modifica el valor del
atributo nombre debido a que la variable local llamada AR apunta al mismo objeto creado en la memoria
Agip de tipo persona y por lo tanto al modificar el atributo del mismo objeto se modifica el objeto
creado originalmente y de esta forma podemos modificar atributos de nuestro objeto incluso desde otros
métodos esto trae lugar a discusiones ya que se dice que Java únicamente pasa parámetros por valor y
no por referencia y de alguna manera es cierto ya que como podemos observar en la memoria Stack el valor
de la variable P se copia a la variable h al llamar al método modificar persona.
Así que en este momento es cuando se copia el valor de la variable P a la variable Arak pero debido
a que lo que recibe AR es la dirección de memoria del objeto persona creado originalmente entonces la
variable AR puede acceder a los atributos y métodos del objeto p entonces la variable AR puede acceder
a los atributos y métodos del objeto persona creado en la memoria AGIP.
De esta manera es que es posible modificar el estado o contenido del objeto original y al terminar de
ejecutar el método modificar persona regresa al método main y de esta manera es posible acceder a los
cambios a través de la variable P que fue la variable que originalmente apuntaba al objeto persona.
Así podemos observar cómo IAVA cuando trabajamos con objetos realmente lo que estamos proporcionando
es el valor de la referencia de memoria.
En este caso el valor de 0 x 3 3 3 y con esta referencia accedemos directamente al objeto y así podemos
modificarlo.
Finalmente estas modificaciones las podremos acceder incluso fuera del método donde fue creado originalmente
el objeto o desde el mismo método donde se creó dichoque.