Hola a todos, hoy os explicare el paso de parámetro por valor en Java, intentando aclarar algo de lo que hay mucha controversia en Java.
Cuando pasamos un parámetro a un método siempre se pasa por valor sea del tipo que sea, sea un String, un int, un double, un objeto, etc. esto significa que el valor del parámetro real (cuando se invoca en la clase ejecutable) se copia al parámetro formal (definido en el método), haciendo que la variable externa no cambie.
Hay mucha controversia en este tema por el paso de parámetro por referencia de otros lenguajes de programación, en Java NO EXISTE EL PASO DE PARÁMETROS POR REFERENCIA, ya que aunque se pase por parámetro un objeto, este copia la dirección de memoria que apunta al objeto, pero no pasamos el objeto en sí, solo su dirección.
Veamos un ejemplo:
public class PasoParametrosApp { public static void main(String[] args) { int a=5; int num[]=new int[3]; //Invocamos el metodo metodoA(a); //Parametro real //El metodo no modifica la variable local System.out.println("La variable a sigue valiendo "+a); //Un objeto tiene una direccion de memoria que es esta System.out.println("Fuera del metodo, la direccion del array es "+num); /* * Invocamos el metodo, y le pasamos como parametro * la direccion del array * por paso de parametro por valor */ rellenaArray(num); //Accedemos al contenido del array System.out.println("El primer valor de array es "+num[0]); System.out.println("El segundo valor de array es "+num[1]); System.out.println("El tercer valor de array es "+num[2]); } public static void metodoA(int a){ //Parametro formal //Modificamos el parametro pasado por valor a=15; } public static void rellenaArray(int num[]){ System.out.println("Dentro del metodo, la direccion del array es "+num); //aqui modifica el a lo que apunta el array, pero la direccion es la misma for (int i=0;i<num.length;i++){ num[i]=i; } } }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Por qué cuando le doy un valor al array num[], por ejemplo num[0]=5, este cambia y con integer no pasa lo mismo?
No entiendo tu pregunta, ¿a que te refieres exactamente?
Un saludo
Al principio se declara int a = 5, y no cambia aunque pase por el método «metodoA» , pero si le doy un valor al array int num[]=new int[3] antes de que pase por el método(rellenarArray), por ejemplo num[0]=5, este cambia cuando pasa por el método .
¿A que se debe que el (int a) no cambie y el (int num[]) si?
Gracias por tu respuesta. Saludos.
Esto se debe a que un array tiene como una direccion guardada en memoria, y tu puedes acceder a valores y si cambias alguno aunque sea en un metodo este se mantiene el cambio, pero si es una variable normal y corriente, no le afectara porque es como si fuera una variable local dentro de ese metodo.
Espero que te sea de ayuda.