Jorge López
2004-05-04 20:38:20 UTC
Buenas,
he empezado hace relativamente poco con Java y he encontrado mi
primera "duda existencial".
El caso es que aprendiendo a manejar listas me di cuenta de que al
cambiar la referencia de un objeto pasado como argumento a un método,
en el programa principal no cambiaba nada.
Así que hice alguna prueba con las clases de envoltura, como ejemplo
más sencillo. Algo como:
#v+
public class Paso {
public static void main (String [] args) {
Integer pepe = new Integer(3);
cambiamelo(pepe);
System.out.println("Vale: "+pepe);
}
public static void cambiamelo(Integer pepe)
{
Integer a = new Integer(10);
pepe = a;
}
}
#v-
Pues para mi sorpresa no cambia el valor ni por casualidad. Y esto es
lo que me choca, porque me enseñaron que java siempre hace el paso de
parámetros por referencia (en el caso de objetos) y por valor en el
caso de tipos primitivos. Por si fuera a servir de algo (un poco
de ilusión nunca viene mal) probé a hacer lo que se ve en el código,
a poner el mismo nombre del argumento que de la variable pasada,
aunque en condiciones normales no hubiera intentado tal cosa.
Para colmo, encuentro este documento de IBM:
http://www-106.ibm.com/developerworks/java/library/j-passbyval/
Viene a decir que java no tiene paso por referencia, que es un "mito"
que corre por ahí pero que para nada es así. Y pone unos ejemplos y
lo prueba.
Así pues, mi duda es: ¿realmente no existe el paso de parámetros por
referencia en java? ¿Para qué sirven entonces las clases de
envoltura? ¿Es que quizás hay alguna limitación en este paso de
parámetros (no se puede cambiar la referencia de un parámetro pero sí
usar métodos que modifiquen sus atributos)?
Muchas gracias y perdón por la duda tan básica, pero se me han caído
todos los esquemas.
Un saludín,
Jorge López
- --
/ _ _ _ / http://jorge.adirc.net
(_/()/ (/(- / jabber: ***@bulmalug.net
_/ / icq: 114276336
/
he empezado hace relativamente poco con Java y he encontrado mi
primera "duda existencial".
El caso es que aprendiendo a manejar listas me di cuenta de que al
cambiar la referencia de un objeto pasado como argumento a un método,
en el programa principal no cambiaba nada.
Así que hice alguna prueba con las clases de envoltura, como ejemplo
más sencillo. Algo como:
#v+
public class Paso {
public static void main (String [] args) {
Integer pepe = new Integer(3);
cambiamelo(pepe);
System.out.println("Vale: "+pepe);
}
public static void cambiamelo(Integer pepe)
{
Integer a = new Integer(10);
pepe = a;
}
}
#v-
Pues para mi sorpresa no cambia el valor ni por casualidad. Y esto es
lo que me choca, porque me enseñaron que java siempre hace el paso de
parámetros por referencia (en el caso de objetos) y por valor en el
caso de tipos primitivos. Por si fuera a servir de algo (un poco
de ilusión nunca viene mal) probé a hacer lo que se ve en el código,
a poner el mismo nombre del argumento que de la variable pasada,
aunque en condiciones normales no hubiera intentado tal cosa.
Para colmo, encuentro este documento de IBM:
http://www-106.ibm.com/developerworks/java/library/j-passbyval/
Viene a decir que java no tiene paso por referencia, que es un "mito"
que corre por ahí pero que para nada es así. Y pone unos ejemplos y
lo prueba.
Así pues, mi duda es: ¿realmente no existe el paso de parámetros por
referencia en java? ¿Para qué sirven entonces las clases de
envoltura? ¿Es que quizás hay alguna limitación en este paso de
parámetros (no se puede cambiar la referencia de un parámetro pero sí
usar métodos que modifiquen sus atributos)?
Muchas gracias y perdón por la duda tan básica, pero se me han caído
todos los esquemas.
Un saludín,
Jorge López
- --
/ _ _ _ / http://jorge.adirc.net
(_/()/ (/(- / jabber: ***@bulmalug.net
_/ / icq: 114276336
/