Parámetros por Valor.
Se utiliza cuándo se requiere pasar el valor de una variable a una función y que está realize alguna operación sobre ese Valor, la función o método crea una Variable Local y trabaja sobre ella.
int a=5;
metodo(a):
void metodo(int c) {
System.out.println(c);
}
La variable c, es una variable local y que recibe una copia del valor de la variable a, es decir se pasa el parámetro por valor.
Paso por Referencia.
El paso por referencia en vez de mandar el valor de la variable, se mánda la dirección de memoria en la que se encuentra almacenada, para de está manera modificar el contenido de la variable. Sin embargo este tipo de paso de parámetros en Java no existe pero si lo quisieramos hacer en C++ sería algo así:
include
using namespace std;
void funcion(int &a) {
a = 10;
}
int main() {
int var = 5;
funcion(&var);
cout <<>
}
El resultado de la ejecución sería, 10 ya que la variable 10 se pasa por referencia y la función modifica su valor.
Ahora regresando a lo importante ¿Cómo pasa los parámetros Java? En java sólo existe una forma de hacerlo y con el paso de parámetos por valor, aquí dejo un ejemplo de esto:
public class PasoPorValor {
public static void main(String [] args) {
int a = 20;
metodo(a);
System.out.println(a);
}
public static void metodo(int c) {
c = 10;
}
}
El valor de la variable a siempre es el mismo. Ahora veamos un ejemplo utilizando objetos, en este caso utilizaré un arreglo, ya que por definición los arreglos son objetos:
public class PasoPorValor {
public static void main(String [] args) {
int[] a = new int[1]; //declaramos un arreglo de una posición;
metodo(a);
System.out.println(a[0]);
}
public static void metodo(int[] c) {
c[0] = 10;
}
}
Pero que ocurrió!!! Por qué cambió el valor mi objeto? En realidad esto ocurre por la sencilla razón de que en Java las variables que apuntan a objetos, no son el objeto, sino una referencia al él, es decir en Java cuando hacemos esto:
int[] a = new int[1];
Estamos creando una referencia que tiene cómo identificador a y que el tipo de datos al que hace referencia es un arreglo de int y además ahí mismo con el operador new se crea el objeto, y por lo tanto la variable a, hará referencia a la locación de memoria de ese objeto.
Entonces cuándo el método recibe la referencia y lo modifica, estamos modificando el valor del objeto, pero ojo, esto no quiere decir que Java pase parámetros por referencia, sino que PASA EL VALOR DE LA REFERENCIA
Si Java pasara valores por referencia cuándo hacemos esto:
public class PasoPorValor {
public static void main(String [] args) {
String a = "Hola";
metodo(a);
System.out.println(a);
}
public static void metodo(String c) {
c = "Nuevo Objeto";
}
}
El resultado debería ser "Nuevo Objeto" Sin embargo esto no sucede por la simple y sencilla razón de que Java sólo pasa parámetros por valor
Espero con esto quede un poco más claro cómo pasa los parámetros Java
Saludos
0 comments:
Post a Comment