Bienvenidos!
Vamos a ver la diferencia entre pasar una variable por valor vía un método versus pasar por referencia
bueno, para poner en contexto podríamos estar en el método Moine o en cualquiera, pero en nuestro
caso en el método Meine.
Y vamos a tener otro método, por ejemplo, test y vemos pasar una variable por argumento, por parámetro.
En el otro método, en el método test y el método test va a modificar el valor de esta variable al modificar
el valor en test como se pasa por valor.
No debería de afectar ni cambiar el valor que tenía en el método principal en el método.
Bueno, y después vamos a ver la diferencia entre pasar por referencia, porque cuando pasamos por referencia
un objeto, cuando se cambia algún valor, algún atributo de este objeto, éste también cambia y mantiene
ese mismo estado en el método principal.
Por lo tanto, si el método test modifica un objeto de referencia, también se ve afectado en el método
principal, porque de referencia es un objeto apunta al mismo puntero.
En la memoria se refiere a la misma instancia.
Mientras cuando el valor no solamente cambia un valor en una parte, pero no tiene por qué afectar en
la otra parte, en el método principal.
Pero lo mejor es ver el ejemplo.
Entonces vamos a cerrar.
Y vamos a crear una nueva clase.
Pasar por valor.
Vamos a tener una variable del tipo integer primitiva por ejemplo y igual a 10.
Entonces, para poner en contexto toda variable primitiva siempre, siempre se pasa por valor y no por
referencia, porque no es un objeto, es un primitivo.
Entonces, cuando se pasa esta variable a otro método por argumento, se pasa por valor.
Por lo tanto, si este otro método cambia este valor da lo mismo porque en el método se mantiene intacto
el valor original.
Bueno, veamos, vamos a imprimir, por ejemplo, y voy a cambiar el texto.
Iniciamos el Moine
con y igual a este valor y la idea es tener otro método.
Entonces lo vamos a crear.
Bueno, por ahora no se preocupen, después vamos a entrar mucho más en detalle a lo que método y a
todo lo que clase.
Por ahora solamente lo vamos a utilizar para ver esta diferencia entre pasar por valor y pasar por referencia.
Bueno, siempre dentro un método, porque siempre se pasan datos de un objeto a otro mediante métodos.
Entonces necesitamos implementar este método públic.
Static boy test.
Bueno, públic, un método público.
Recuerden, después vamos a ver más detalles sobre esto.
Es Tatic, es un método estático.
Por lo tanto, se puede invocar sin necesidad de crear el objeto, simplemente usando el nombre de la
clase o de forma directa si estamos en otro método estático como el main.
Por tanto, el main puede invocar este método sin ningún problema, ya que ambos son estatico y veidt
no devuelve ningún valor, no retorna nada y tenemos que pasar por valor el parámetro del tipo entero
primitivo.
Indicamos el tipo, el nombre de esta variable y aunque puede ser cualquiera, vamos a imprimir.
Iniciamos el método test
con Bueno y sería el argumento que estamos recibiendo por parametro esta área Laka Y igual bien si se
fijan todavía no hemos hecho nada, simplemente vale 10 y acá se va a imprimir.
En primer solamente iniciamos el método meiko, ni inició un método maiko ni ahora vamos a invocar en
el método Main.
El método test se fija en test y por argumento pasamos la variable.
Eso sería todo.
Ahora, con esto, si vuelvo a ejecutar va a imprimir esto porque se llama este método se invoca.
Entonces me tomé, invoca o envía un mensaje al método test y ahora iniciamos métodos test con igual
10.
Ahora vamos a cambiar el valor de Y Vale, por ejemplo, 35.
Entonces acá voy a imprimir.
El nuevo valor de acá finaliza
con y o con el noveno.
Pero bueno, acá va a imprimir 10 y 35 y está correcto porque lo modificó.
35.
Bueno, entonces después después del test vamos a imprimir acá.
Entonces finaliza el método Main.
Con el valor de igual a tanto supuestamente test Modificã pasa por parametro por argumento de método
test 10.
Y acá se modifica, casi se fijan 10 y después cambio 35 y acá bueno.
Se vuelve primer 10, pero recuerden, acá se pasa el valor y no una referencia, un objeto.
Por lo tanto se mantiene intacto, debería mostrar a caddies y no 35, a pesar de que acá en el otro
método se cambió.
Se fijan, se mantienen 10 y no 35 y eso se debe a que un primitivo se pasa el valor y no el objeto
en sí, no la referencia a este objeto.
Entonces finaliza el método mé con el valor dei y se mantiene igual,
no cambia.
Ahora bien, me podrían decir o podríamos pensar si cambiamos el tipo integer de referencia con igual
10 y acá integer de que pasamos un objeto o una referencia y cambiamos acá también debería cambiar.
Acá debería afectar, pero tampoco.
Sigue siendo 10, se mantiene igual a pesar de que el de referencia.
Bueno, entonces cómo?
Por qué si pasamos por valor y también pasamos por referencia, no cambia en ninguno de los casos.
Se debe a que Integer, la clase Integer y también la clase streeck y la clase doble.
La clase float y todas esas clases rapper que representan a lo primitivo son inmutables.
Por lo tanto, cada vez que se modifica el valor, en este caso se retorna una nueva instancia, y eso
lo vimos.
No mantiene la instancia anterior siempre e inmutable, retorna una instancia.
Por lo tanto, si estamos pasando por referencia y no por valor, pero al modificar el objeto ya no
es el objeto original que tiene acá es otra instancia y esta es la que cambia, pero la anterior se
mantiene igual, es inmutable.
Son objetos especiales de aullaba que no se modifica.
La instase original se mantiene intacta, por eso acá no cambia.
Ahora, si usamos otro tipo de instancia, otro tipo de clase, por ejemplo, una clase propia nuestra,
hay por supuesto que se va a pasar por referencia, pero también si cambiamos, saca algún valor.
Algún atributo de este objeto también va a afectar al método, porque por lo general no son inmutables
ciertos objetos.
Ciertas clases de Yaiba son inmutables y bueno, a medida que avancemos en el curso los vamos a ir viendo.
Por ejemplo, ya hemos visto alguna Electric Integer, cualquier clase del tipo Amber.
Como había explicado el chord, el bit, el long, los decimales float dobles son inmutables.
Por lo tanto, que se cambie el valor de esta forma o con el nombre.
La clase Integer punto valido of siempre retorna unas 90.
Por lo tanto, cambia, cambia la referencia.
Agha cambia a otro objeto, pero otro objeto original se mantiene intacto en 10 la próxima clase.
Vamos a ver un ejemplo de pasar por referencia, pero que no sea inmutable, que sea mutable y que finalmente
afecte.
Es decir, si se cambia, se modifica el objeto.
En el método test también se modifica en el método.
Pero bien lo dejamos en la siguiente clase.
Nos vemos.