Aclaracion de duda sobre concepto de referencia
Hola
Soy nueva en el foro, estoy estudiando para una certificacion OCJA, y me surgio una duda de concepto que ojala ustedes me pudieran resolver.
He leido que el paso de parametros a un metodo puede ser por valor o referencia, siendo los primitivos por valor, y los objetos por referencia
se que cuando el paso es por valor, se hace una copia de la variable (o valor de la variable) y por lo tanto cuando se sale del metodo, el valor original de la variable no fue afectado, sin embargo cuando se pasa un objeto, el valor de la variable SI se ve afectado en todo momento.
Se me ocurrio entonces que podia pasar a un metodo, una variable tipo Integer, porque finalmente es una variable int envuelta en formato objeto, sin embargo para mi sorpresa.. al salir del metodo, veo que la variable imprime el valor original, como si se tratase de un primitivo...
Me podrian decir porque pasa esto??
Anexo mi pedacito de codigo para ejemplificar mejor
Gracias
System.out.println("Argument: value = " + valor);
addfour(valor);
System.out.println("After method call: value = " + valor);
--------------------------------------------------------------------------------
private static void addfour(Integer valor){
Integer valor4 = new Integer(4);
System.out.println("Parameter: value = " + valor);
valor = (valor + valor4);
System.out.println("Leaving method: value = " + valor);
}
The output is :
Argument: value = 1
Parameter: value = 1
Leaving method: value = 5
After method call: value = 1
- Perla's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
En Java el paso de parametros
En Java el paso de parametros siempre es por valor, siempre, siempre, siempre.
Sucede que cuando el parametro no es un primitivo el valor que se pasa es el valor de la referencia, pero nunca la referencia como tal; en java esto no es posible.
Para una discusión más larga y detallada ve este post:
http://www.javamexico.org/foros/java_standard_edition/envio_y_recepcuion...
Saludos
Integer es inmutable
Lo que sucede en tu código en la línea:
es realmente:
Dentro del método, la referencia
valor
externa, fue copiada a la referenciavalor
local a ese método, que dentro del método se refiere ahora a otro objeto creado, como puedes observar en el código.Gracias
Quedo mas claro... gracias
Gracias por el link
Gracias por la liga... fue de mucha ayuda =)
Resucitando el tema (¬¬ creo que ya van dos)
mmm, entonces alguien me pudiera explicar que es lo que pasa con el método sort de la clase Arrays (java.util.Arrays), que cuando uno le pide ordenar una lista no regresa una ordenada. En realidad sin usar referencias no me explico como funciona esto:
class Cosa{
public static void main(String ... args){
int[] arreglo = new int[]{9,5,3,12,4,7,20,3,45,6};
//Vamos a imprimirlo en desorden:
for(int i : arreglo) System.out.println(i);
//Separamos orden de desorden
System.out.println("============================");
//Lo ordenamos:
Arrays.sort(arreglo);
//Lo imprimimos ordenado:
for(int i : arreglo) System.out.println(i);
}
}
¿Alguien me pudiera explicar porqué si Arrays.sort() no regresa otra lista y si en Java no hay uso de referencias, como es que arreglo se comportó como una referencia?
Pasas el valor de la referencia
Hay varios posts que aclaran el problema del paso de parámetros en Java y otros lenguajes. Cuando decimos que el paso es por valor, es que los argumentos "son recibidos" por variables locales del método invocado. Si lo que pasas es el valor de un tipo primitivo, entonces la variable local toma ese valor; si lo que pasas es el valor de una referencia (en esencia un apuntador), entonces la variable local toma el valor de esa referencia.
Si modificas en el método mediante esa referencia local al objeto, estás modificando el objeto original, pero si esa variable referencia local toma otro valor, entonces ya no modificas el objeto original, a través de esa referencia.
Estudio para examen
Hola! yo también soy nuevo aquí :-)
¿Ya hiciste el exámen?
Te comento que el mes pasado realicé la certificación OCJA después de haber tenido de guía por unos meses el libro de McGraw Hill para esta certificación, este libro cubre todos los temas vistos en el exámen, si es que no lo estás utilizando para estudiar, te puedo mandar una copia en pdf por correo si gustas, lo considero bastante útil :-)
Libro para certificación
Eeeh tio, me me puedes pasar el libro, mi correo es marcosroberto.openbsoft@gmail.com
Desde ya muchas gracias. Saludos