General

II. Paso de parámetros en Java: Por Valor

Existe una creencia errónea muy difundida de que en Java el paso de parámetros se realiza de dos formas.

● Los tipos primitivos se pasan por valor.
● Los objetos se pasan por referencia.

 

Es necesario aclarar que en Java solo existe un único modo de paso de parámetros. Paso por valor. Y lo anterior, es independiente si se trata de un tipo primitivo o un objeto.

Primer Ejemplo.

Si tenemos el siguiente método.

image

Ahora creamos un objeto Empleado para triplicar el sueldo.

image  Hasta aquí todos concordamos que no se altera el valor de porcentaje.

image

Definitivamente comprobamos que incluso aquellos que me acusan de ignorante por no tener idea de lo que hablo, tienen razón! Los tipos primitivos son pasados por valor. Ahora, veamos con un segundo ejemplo si tienen razón al decir que los objetos son pasados por referencia.

Segundo Ejemplo.

Tenemos una clase Empleado. El primer parámetro del constructor es el nombre, el segundo, tercero y cuarto es el día, mes y año respectivamente de su fecha de contrato en la empresa.

image

Observemos como al empleado en cuestión le asignamos como fecha de contrato el 11 de Junio del 2009.

Al imprimir la fecha de contrato podremos observar que dicha fecha fue alterada ya que obtenemos una fecha del 11 de Junio de 1999! Le hemos quitado 10 años de trabajo al empleado!

Básicamente lo anterior no es un paso de parámetros, pero es un buen ejercicio de calentamiento para prepararnos con lo que sigue.

Tercer Ejemplo.

Entremos en materia pues y hagamos un método que reciba como parámetro un Objeto de tipo Empleado.

image

Ahora vamos a crear un objeto Empleado y pasarlo como parámetro al método triplicarSueldo.

image

Upss!!!!!!!!!! El sueldo del empleado ya no es el mismo!!!!!!!!!!!!!! oh nooooo, tenían razón!! Los parámetros en Java se pasan por referencia😦 me equivoque! Bueno ni modo, cerrare el blog. Nos vemos……

……………………….

……………………….

Bueno soy malo para fingir pero hice mi mejor esfuerzo. La verdad es que pese a lo anterior, los objetos son pasados por valor, le guste a quien le guste así es y será por los siglos de los siglos. Lo que realmente sucede es que se pasa una copia de la referencia!

¿Copia de la referencia?… Pero que es eso? De que hablo?.. Bueno, esto se explicará en la tercera parte de este artículo.

Nos vemos a la próxima!!

3 comentarios en “II. Paso de parámetros en Java: Por Valor

  1. Me parece muy interesante este concepto: “Que se pasa la copia de la referencia.” La verdad, nunca lo habia visto de esa manera. Aunque tal vez tenga que decir que cuando se dice que los objetos se pasan por referencia sea una manera de simplificar el asnto del paso de parametros y hacerlo mas entendible a las personas, ya que para un principiante es mas sencillo de comprender. Pero muy interesante tu articulo, me queda muy claro el concepto. Gracias.

  2. El artículo es correcto. Cualquiera que haya mirado la certificacion SCPJ de Java, verá una explicación correcta de por qué el paso de parámetros es SIEMPRE por valor independientemente de que sean primitivas o variables de referencia a objetos (se pasa el valor de la variable de referencia que apunta al objeto, no el objeto).

    Casa p = new Casa(“miCasa”);

    p no es un objeto, sino una variable de referencia que aputna al objeto Casa(miCasa), por decirlo así como los punteros en C y realmente se le pasa el valor de p (que realmente es la dirección donde está el objeto), por eso es independientede que sea un entero o una variable de referencia a un objeto, ya que se manda el valor de la variable.

  3. Te das cuenta de que hacer: ascari.triplicarSueldo(ascari); es incorrecto y demuestra un mal entendimiento de la OO? Yo solo lo digo para que reflexiones un poco en tu manera de programar…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s