Java - Parámetros Por Valor & Por Referencia
Concepto
-
los
parámetros
se pueden pasar a unmétodo
de dos maneras diferentes-
Por valor
-
Por referencia
-
Parámetro por Valor
-
Cuando se pasa un
parámetro
a unmétodo por valor
se envía una copia del valor delparámetro
almétodo
- Esto significa que cualquier cambio que se haga al
parámetro
dentro delmétodo
no afectará al valor original del parámetro en el método que lo llamó
- Esto significa que cualquier cambio que se haga al
Ejemplo 1 - Paso de Parámetro por valor
public void incrementarValor(int numero) {
numero = numero + 1;
}
int x = 5;
incrementarValor(x);
System.out.println(x); // Imprime 5
Ejemplo 2 - Paso de Parámetro por valor
public void duplicarValor(int numero) {
numero = numero * 2;
}
int x = 5;
duplicarValor(x);
System.out.println(x); // Imprime 5
-
Se pasa una
copia
delvalor
dex
almétodo incrementarValor()
-
Dentro del
método
se lesuma 1
alvalor del parámetro
pero esto no afecta alvalor
original dex
fuera delmétodo
- Al imprimir x después de
llamar
almétodo
se obtiene elvalor
original de x que es 5.
- Al imprimir x después de
Parámetro por Referencia
-
Cuando se pasa un parámetro a un
método por referencia
se envía ladirección de memoria
del objeto almétodo
- Significa que
cualquier cambio
que se haga alobjeto
dentro delmétodo
sí afectará alobjeto original
en elmétodo
que lo llamó
- Significa que
Ejemplo 1 - Paso de Parámetro por Referencia
- Se pasa la
dirección de memoria
delobjeto
lista almétodo incrementarValor()
public void incrementarValor(ArrayList<Integer> lista) {
lista.add(1);
}
ArrayList<Integer> lista = new ArrayList<>();
incrementarValor(lista);
System.out.println(lista.size());
Ejemplo 2 - Paso de Parámetro por Referencia
public void duplicarValores(ArrayList<Integer> lista) {
for (int i = 0; i < lista.size(); i++) {
lista.set(i, lista.get(i) * 2);
}
}
ArrayList<Integer> lista = new ArrayList<>(Arrays.asList(1, 2, 3));
duplicarValores(lista);
System.out.println(lista); // Imprime [2, 4, 6]
-
Dentro del
método
se agrega unelemento
a lalista
-
Esto sí afecta al
objeto
original delista
fuera delmétodo
ya queambos tienen la misma dirección de memoria
- Al imprimir el tamaño de la
lista
después de llamar almétodo
se obtiene 1 ya que se ha agregado un elemento a lalista
- Al imprimir el tamaño de la
-
-
Importante
-
Primitivos
(como int, float, etc.) siempre se pasanpor valor
-
Objetos
(como ArrayList, String, etc.) se pasanpor referencia
-
Resumen
-
Diferencia entre pasar un
parámetro por valor
ypor referencia
-
Cuando se pasa
por valor
se envía una copia delvalor del parámetro
almétodo
- Cualquier cambio que se haga al
parámetro dentro del método
no afecta al valor original delparámetro
en elmétodo
que lo llamó
- Cualquier cambio que se haga al
-
Cuando se pasa
por referencia
se envía ladirección de memoria
delobjeto
almétodo
- Cualquier cambio que se haga al
objeto
dentro delmétodo
sí afecta alobjeto
original en el método que lo llamó
- Cualquier cambio que se haga al
-
Deja un comentario