3.5 Paso de variables a métodos - ajpaez/OCA GitHub Wiki

(OCA Objective 6.8)

#Paso de variables de referencia Cuando se pasa una variable de referencia en un método, lo que en realidad se pasa es la referencia de dicho objeto, no el objeto en si. Recuerde que una variable de referencia contiene la información para poder llegar al objeto especifico en memoria (heap). Mas importante aun es recordar, que ni siquiera lo que se está pasando es la variable con la referencia real, sino una copia de la variable de referencia. En otras palabras, tanto el que llama como el método que es llamado tendrán copias idénticas de la referencia, por lo tanto, ambos se refieren a el mismo objeto en el heap.

#Usa Java paso por valor? Java usa el paso por valor para todos las variables que estén en la misma VM. Paso por valor significa pasar el valor de la variable y esto significa paras una copia de la variable. No hay diferencia si se están pasando variables primitivas o de referencia, tu siempre pasas una copia de los bits que almacena la variable. El método llamado no puede cambiar la variable usada en la llamada del método, aunque para las variables de referencia, el método al que se llama puede cambiar el objeto que representa la variable mencionada. ¿Cual es la diferencia entre el cambio de la variable y el cambio del objeto? Para referencias a objetos, esto significa que el método llamado no puede reasignar la variable de referencia original del llamador y hacer que se refiera a un objeto diferente o null. Por ejemplo:

void bar() {
  Foo f = new Foo();
  doStuff(f);
}
void doStuff(Foo g) {
  g.setName("Boo");
  g = new Foo();
}

En el código anterior, la reasignación de g no afecta a f. Al finalizar el método, dos objetos habrán sido creados, uno referenciado a la variable local f y otro referenciado a la variable local (argumento) g.

#Paso de variable primitivas Para el paso de variables primitivas ocurre lo mismo, se pasa una copia de los datos de la variable. Al tratarse de una variable primitiva, la propia variable ya representa el valor, se pasa una copia de dicho valor y los cambios que se realicen en la variable no se verán reflejados fuera del método.