En cualquier lenguaje de programación, el paso de parámetros es vital para modularización del código fuente. El paso de parámetros le permite capturar valores o alimentarlos directamente al código fuente en forma de parámetros. Diferentes lenguajes de programación pasan parámetros de diferentes maneras, pero paso por valor y paso por referencia son los dos modos más prevalentes.
En este artículo, explicaré estos dos métodos predominantes para pasar parámetros. También le mostraré qué método usa Java para pasar parámetros. Lo más importante es que le mostraré cómo engañar al compilador para que obtenga los máximos beneficios de Java, la opción predeterminada para aplicaciones simples y complejas. ¡Entremos de inmediato!
Pasar por valor frente a pasar por referencia
Paso por valor y paso por referencia describir cómo un lenguaje pasa variables en funciones. En pass-by-value, una función el valor del parámetro se copia a otra variable. Por el contrario, en el paso por referencia, usted pasar/copiar los parámetros reales a la función. A menudo, los requisitos de seguridad del código dictan si debe usar pass-by-reference o pass-by-value.
Echemos un vistazo a cada modelo en detalle.
Pasar por referencia
En la mayoría de los lenguajes de programación y la teoría del compilador, el paso por referencia pasa la referencia de un parámetro que se llama. En otras palabras, la persona que llama y la persona que llama hacer referencia y utilizar 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 profesionales
- Pass-by-reference es viable si necesita llamar a una función que necesita modificar sus argumentos antes de reutilizarlos
- Pasar por referencia consume menos memoria porque hace referencia a la misma variable según sea necesario
Pasar por valor
Pass-by-value, por otro lado, pasa una copia de una variable como parámetro de las funciones. En este método, se duplica el valor de cada variable en la persona que llama. También se copia en una nueva variable correspondiente del destinatario de la llamada. Cada vez que la variable original cambia, no afecta a la persona que llama. Eso es porque cada destinatario tiene una copia del parámetro original en lugar del propio parámetro real.
Consejos profesionales
- El paso por valor es beneficioso cuando los cambios en la variable pasada no deberían afectar el valor real
- Pass-by-value crea una nueva variable ficticia cada vez, por lo que consume más memoria
Paso por referencia vs Paso por valor
Para ver mejor la diferencia entre pasar por referencia y pasar por valor, consulte esta tabla de comparación.
Pasar por referencia | Pasar 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 | Por lo general, requiere más memoria |
Consume menos memoria y tiempo que pasar por valor | Por lo general, requiere más tiempo para compilar y ejecutar debido a la sobrecarga de copia |
Ahora tiene una comprensión clara de los diferentes métodos de paso de parámetros, así que veamos de qué lado cae Java.
Paso de parámetros en Java
En Java, todos los variables primitivascomo un número entero o un carácter, almacenar los valores reales (datos). En cambio, variables no primitivascomo una clase o un objeto, almacenar las variables de referencia que contiene las direcciones de los objetos a los que se hace referencia.
La asignación de memoria estática y la ejecución de subprocesos en Java siempre usan memoria de pila. Por otro lado, Java almacena variables no primitivas como objetos en almacenamiento Heap.
Por regla general, Java siempre pasa por valor
Java siempre usa pass-by-value para pasar parámetros o argumentos. Cada vez que invoque un método, Java crea una copia de cada parámetro y lo pasa al método. Si el parámetro que pasó es de un tipo de datos primitivo, este parámetro copia el valor dentro de la memoria de pila. Luego, pasa al método llamado. Sin embargo, si el parámetro pasado es un tipo de datos no primitivo como objeto, apunta una referencia o una dirección a la memoria de pila 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. Es por eso que, técnicamente, pasar un objeto como parámetro sigue siendo pasar un valor, pero el valor pasado es una referencia.
Dicho esto, todavía puedes engañar al compilador para que pase por referencia en Java. ¡Veamos cómo!
Cómo pasar por referencia en Java
Java no admite el paso por referencia listo para usar, pero aún puede lograr las funcionalidades de pasar un parámetro como referencia. Antes de eso, déjame mostrarte por qué es posible que desees pasar por referencia en Java.
Java Pass-by-Reference: las ventajas
- Devuelve múltiples valores de una función.
- Cambia el valor original de un parámetro
- Pasa tipos de datos no primitivos
- Consume menos memoria
- Ahorra gastos de copia
Si quieres beneficiarte de estas ventajas, he recopilado una lista de 3 técnicas para pasar por referencia en Java. Básicamente, aprovechará varios aspectos de El enfoque de programación orientada a objetos de Java. De esa manera, también puede obtener las ventajas y beneficios de pasar por referencia para satisfacer sus necesidades específicas. ¡Hablemos de estas técnicas!
1. Devolver un valor y actualizarlo
Esta es una técnica bastante sencilla. lo harás devolver los cambios realizados en las variables dentro de una función y actualizar sus direcciones de memoria originales. Al definir un método con un tipo de devolución en Java, puede devolver el parámetro pasado en él. De esa manera, puedes actualizar el valor original de la variable.
2. Hacer una variable de miembro público en una clase
Para pasar un tipo de datos no primitivo como argumento y actualizar varias variables miembro, puede pasar un objeto de clase que representa múltiples variables de una clase a una función. Entonces, también puedes actualizar las variables de miembros públicos de ese objeto. A través de este método, todos los cambios que realice en las variables miembro del objeto pasado se harán visibles en la dirección de memoria original.
3. Crear una matriz de un solo elemento
Una matriz en Java almacena múltiples valores homogéneos en una sola variable, por lo que puede crear una matriz de un solo elemento. Luego, puede pasarlo como un parámetro a una función. Todos los cambios que realice en la matriz también estarán en la dirección de memoria original. Eso significa que también puede eliminar la necesidad de crear variables adicionales como en el caso de pass-by-value.
También puede encontrar fragmentos de código para estos métodos anteriores.
Ultimas palabras
En este artículo, discutimos las dos técnicas predominantemente empleadas para pasar variables a funciones/métodos. te mostré el diferencias entre pass-by-reference y pass-by-value, para que puedas conocer los beneficios de cada uno. También hemos mirado cómo ocurre el paso de parámetros en Java (recordatorio: Java usa paso por valor). Finalmente, te mostré cómo no puedesrick el compilador para lograr los beneficios de pasar variables por referencia en Java, aunque solo admite estrictamente el paso por valor. Estos beneficios incluyen pasar varias variables a la vez, cambiar el valor original del parámetro y consumir menos memoria.
¿Tiene alguna pregunta sobre el paso de parámetros? Revisar la Preguntas frecuentes y recursos ¡abajo!
Preguntas más frecuentes
¿Qué es la función de llamada y la función de llamada?
En el contexto de un lenguaje de programación, una persona que llama es una función que llama a otra función. Por el contrario, un llamador es una función llamada por la función llamador. Estas funciones son esenciales para referirse a variables u objetos dentro de un lenguaje de programación para el paso de datos. Por ejemplo, en pass-by-reference, la persona que llama y la persona que llama usan la misma variable como referencia.
¿Qué son las variables primitivas y no primitivas en Java?
En Java, las variables primitivas son las variables predefinidas. Por el contrario, los tipos no primitivos son definidos por el usuario. Los tipos primitivos en Java incluyen boolean, byte, char, short, int, long, float y double. Los tipos no primitivos en Java incluyen cadenas, matrices, clases e interfaces. En Java, puede pasar variables primitivas como valor. Por el contrario, utiliza variables no primitivas como referencia. Eso también significa que Java sigue un modelo de paso por valor.
¿Qué es la programación orientada a objetos?
La Programación Orientada a Objetos (POO) es un modelo de programación informática basado en el concepto de “objetos” que contiene datos y código. Tampoco se centra en las funciones y la lógica. Java es uno de los lenguajes de programación orientados a objetos más utilizados y conocidos. La encapsulación, la abstracción, la herencia y el polimorfismo son los principios principales de la programación orientada a objetos.
¿Qué es un compilador?
En informática, un compilador es una pieza de código de software que traduce el código escrito en un lenguaje de programación a otro lenguaje. Por lo general, los compiladores se aseguran de que estés usando el lenguaje de programación como deberías. En Java, también puede engañar a este compilador para que siga un modelo de paso por referencia, no un paso por valor.
¿Qué es una memoria de pila?
La memoria de pila es memoria física en la RAM asignada a cada subproceso en tiempo de ejecución. La gestión de la memoria en Stack sigue un orden de último en entrar, primero en salir. También permite la asignación de memoria estática y la ejecución de un hilo en Java. Eso también permite que Java siga estrictamente un modelo de paso por valor.
Recursos
TechGenix: Boletines
Suscribir a nuestros boletines para más contenido de calidad.
TechGenix: artículo sobre cómo solucionar el problema de carga de aplicaciones Java en IE.
Obtenga información sobre cómo solucionar los problemas al cargar aplicaciones Java en Internet Explorer aquí.
Java: Documentación
Obtenga más información sobre Java y todo lo que necesita saber para comenzar aquí.
Java: técnicas de paso de parámetros
Obtenga más información sobre las diferentes técnicas de paso de parámetros junto con fragmentos de código aquí.
TechGenix: nueva vulnerabilidad de Java Framework
Obtenga más información sobre el nuevo marco de Java y su vulnerabilidad aquí.