Java - Parámetros Por Valor & Por Referencia
Concepto
-
los
parámetrosse pueden pasar a unmétodode dos maneras diferentes-
Por valor -
Por referencia
-
Parámetro por Valor
-
Cuando se pasa un
parámetroa unmétodo por valorse envía una copia del valor delparámetroalmétodo- Esto significa que cualquier cambio que se haga al
parámetrodentro delmétodono 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
copiadelvalordexalmétodo incrementarValor() -
Dentro del
métodose lesuma 1alvalor del parámetropero esto no afecta alvalororiginal dexfuera delmétodo- Al imprimir x después de
llamaralmétodose obtiene elvalororiginal 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 referenciase envía ladirección de memoriadel objeto almétodo- Significa que
cualquier cambioque se haga alobjetodentro delmétodosí afectará alobjeto originalen elmétodoque lo llamó
- Significa que
Ejemplo 1 - Paso de Parámetro por Referencia
- Se pasa la
dirección de memoriadelobjetolista 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étodose agrega unelementoa lalista-
Esto sí afecta al
objetooriginal delistafuera delmétodoya queambos tienen la misma dirección de memoria- Al imprimir el tamaño de la
listadespués de llamar almétodose 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 valorypor referencia-
Cuando se pasa
por valorse envía una copia delvalor del parámetroalmétodo- Cualquier cambio que se haga al
parámetro dentro del métodono afecta al valor original delparámetroen elmétodoque lo llamó
- Cualquier cambio que se haga al
-
Cuando se pasa
por referenciase envía ladirección de memoriadelobjetoalmétodo- Cualquier cambio que se haga al
objetodentro delmétodosí afecta alobjetooriginal en el método que lo llamó
- Cualquier cambio que se haga al
-
Deja un comentario