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.
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.
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:
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 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 referencia | Paso por valor |
Pasa la referencia original o los parámetros reales a la función | Copia la variable de función en otra variable ficticia |
Los cambios realizados dentro de la función afectan a las variables originales | Los cambios realizados dentro de la función no actualizan las variables originales |
Requiere menos memoria | Suele requerir más memoria |
Consume menos memoria y tiempo que el paso por valor | Suele requerir más tiempo de compilación y ejecución |