Después de investigar bastante, he logrado entender por fin el paso de parámetros en Java
Bueno al menos eso creo yo
Intentare explicar lo que entendí:
En muchos artículos leía esto:
En java se pasa todo por valor, lo que hay que entender es que pasa los objetos por referencia, y esas referencias se pasan por valor.Pero nunca lograba entenderlo del todo. Hasta ahora:
Esta frase significa que los objetos que se pasan por parámetros se pasan por referencia, pero por un valor, y no el objeto en tal como se haría en C/C++. Ese valor es como una especie de apuntador a la memoria en donde se encuentra dicho objeto.
Muestro un ejemplo:Cuando nosotros creamos un objeto en Java:
Perro perro1 = new Perro("Bobby");
Estamos reservando espacio en memoria para un nuevo objeto, y lo que hacemos es apuntar con la variable perro1 a ese objeto que acabamos de crear.
Podemos tener mas de 1 variable apuntando a un mismo objeto, por ejemplo:
Perro perro1 = new Perro("Bobby");
Perro perro2 = perro1;
Como ven las variables perro1, y perro2 están apuntando al mismo objeto. Ahora bien, que pasaría si hago lo siguiente:
Perro perro1 = new Perro("Bobby");
Perro perro2 = perro1;
perro1 = new Perro("Lobito");
¿Que pasaría con la variable perro2? Pues nada, la variable perro2, seguiría estando igual, seguiría apuntando al mismo objeto de siempre, lo único que paso fue que la variable perro1 esta apuntando a otro objeto nuevo, eso es lo único que paso.
Ahora otro ejemplo pero con métodos, que es lo que me confundía, pero teniendo claro la información anterior, logre entender esto de los pasos por parámetros :Tenemos una clase común y corriente, con sus respectivos get y set:
public class Perro {
private name;
this.name = name;
}
public void setName
(String name
) { this.name = name;
}
return this.name;
}
}
Y tenemos la clase Main:
public class Main {
pubic Main() {
Perro perro1 = new Perro("Bobby");
modificar(perro);
}
public void modificar(Perro perro) {
Perro perro2 = new Perro();
perro = perro2;
}
public static void main
(String[] args
) { new Main();
}
}
Bien, en el constructor de la clase Main, creamos un objeto y la variable que lo esta apuntando es
perro1.
Después llamamos al método modificar y le pasamos como parámetro el objeto perro1,
PERO... en realidad no le estamos pasando el objeto, si no que le estamos pasando la referencia como un valor a ese objeto, por lo que en el método modificar, la variable
perro también esta apuntando al mismo objeto.
Dentro del método modificar creamos otro objeto perro y la variable que lo esta apuntando es
perro2, ahora prestemos atención en esta parte:
Cuando hacemos lo siguiente, ¿que creen que pasara?:
perro = perro2;
Lo que pasara es que la variable perro solo apuntara a lo mismo que esta apuntando perro2. En ningún momento estaríamos modificando la variable perro1 que anteriormente creamos.
ADVERTENCIA: No estoy 100% seguro de que esta idea sea 100% certera, por favor corrijanme si me equivoco.
Agradecería si me dijeran si mi idea es correcta, así me quito una carga muy pesada de encima
Un articulo que me ayudo a entender esto:
http://www.iteramos.com/pregunta/1043/java-es-por-referencia-o-paso-por-valorEspero que sirva de ayuda, un saludo