Paso de parámetros en Java: Referencia y Valor

En cualquier lenguaje de programación, el paso de parámetros es vital para modular el código fuente. El paso de parámetros permite capturar valores o introducirlos directamente en el código fuente en forma de parámetros. 

Diferentes lenguajes de programación pasan parámetros de diferentes maneras, pero el paso por valor y el paso por referencia son los dos modos más prevalentes.

¿Qué es el Paso de Parámetros en Java?

En Java, todas las variables primitivas, como un entero o un carácter, almacenan los valores reales (datos). Por el contrario, las variables no primitivas, como una clase o un objeto, almacenan las variables de referencia que contienen las direcciones de los objetos a los que se hace referencia.

La asignación de memoria estática y la ejecución de hilos en Java siempre utilizan la memoria stack. Por otro lado, Java almacena las variables no primitivas, como los objetos, en el almacenamiento heap.

Java siempre utiliza la técnica de paso por valor para pasar los parámetros o argumentos. Cada vez que se invoca un método, Java crea una copia de cada parámetro y la pasa al método. Si el parámetro que se pasa es de un tipo de datos primitivo, este parámetro copia el valor dentro de la memoria stack. Luego, lo pasa al método llamado. 

Sin embargo, si el parámetro pasado es de un tipo de datos no primitivo como un objeto, apunta una referencia o una dirección a la memoria stack donde residen los datos reales.

En Java, todos los tipos de datos no primitivos suelen ser referencias con la dirección de los datos reales. Por eso, pasar un objeto como parámetro sigue siendo técnicamente pasar un valor, pero el valor pasado es una referencia.

Paso por valor en Java

El paso por valor pasa una copia de una variable como parámetro a las funciones. En este método, el valor de cada variable del llamador se duplica. También se copia en una nueva variable correspondiente del que recibe la “llamada”.

Cada vez que la variable original cambia, no afecta al que recibe la “llamada”. Esto se debe a que el “destinatario” tiene una copia del parámetro original en lugar del propio parámetro. Consejos:

  • El paso por valor es beneficioso cuando los cambios en la variable pasada no deben afectar al valor real
  • El paso por valor crea una nueva variable ficticia cada vez, por lo que consume más memoria

Paso por referencia en Java

En la mayoría de los lenguajes de programación y en la teoría del compilador, el paso por referencia pasa por la referencia de un parámetro al que se llama. En otras palabras, el que “llama” y el que recibe la “llamada” hacen referencia y utilizan la misma variable para el parámetro.

Cada vez que esta variable referenciada cambia, todas las funciones que hacen referencia a esta variable también cambian. Consejos:

  • El paso por referencia es viable si necesitas llamar a una función que necesita modificar sus argumentos antes de reutilizarlos
  • El pase por referencia consume menos memoria porque hace referencia a la misma variable siempre que sea necesario

Pase por referencia vs Paso por valor

El paso por valor (pass-by-value) y el paso por referencia (pass-by-reference) describen cómo un lenguaje pasa las variables a las funciones.

En el paso por valor, el valor de un parámetro de la función se copia en otra variable. Por el contrario, en el paso por referencia, se pasan/copian los parámetros reales a la función

A menudo, los requisitos de seguridad del código dictan si se debe usar el paso por referencia o el paso por valor.

Pase por referenciaPaso por valor
Pasa la referencia original o los parámetros reales a la funciónCopia la variable de función en otra variable ficticia
Los cambios realizados dentro de la función afectan a las variables originalesLos cambios realizados dentro de la función no actualizan las variables originales
Requiere menos memoriaSuele requerir más memoria
Consume menos memoria y tiempo que el paso por valorSuele requerir más tiempo de compilación y ejecución
¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: