Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por knar (4125) <solrac888@QUITAESTOyahoo.com> el Jueves, 15 Noviembre de 2007, 01:12h (#981956)
    ( http://blog.irreality.eu/ )
    Pues yo creo que en el documento de Sun tienen toda la razón. Veamos:

    class Num
    {
        int value;
        public Num ( int value ) { this.value = value; }
        void setValue ( int value ) { this.value = value; }
        int getValue ( ) { return value; }
    }

    Supongamos que tenemos estas funciones:

    void modificar1 ( Num n ) { n.setValue(10); }
    void modificar2 ( Num n ) { n = new Num(10); }

    En un lenguaje como Pascal, donde existe el paso de parámetros por referencia, tú puedes ejecutar cualquiera de estas dos funciones y el resultado es que n acaba apuntando a un objeto que representa el número 10. Tú puedes tener una función que tome como parámetro ( var n:Num ), y luego hacer n=algo, y hala, la n se te modificó fuera.

    En Java la primera función hace que n apunte a un objeto que representa el 10 (el mismo objeto que antes, por cierto). Sin embargo, la segunda no lo hace. ¿Por qué? Porque no hay paso por referencia como tal, hay paso de una referencia por valor.

    ¿Que en la práctica esto se puede usar para lo mismo que el paso por referencia? Vale. Pero no hay paso por referencia. Paso por referencia implica que tú puedas hacer algo como:

    Variable v; //v tiene un valor
    hacerAlgoCon(v); //v ha cambiado de valor

    Y en Java NO PUEDES hacer eso. Pueden cambiar cosas que están apuntadas por v, pero no cambia v. Así pues, el paso de parámetros en Java es por valor.

    Aclarado esto, mi opinión personal es que los conceptos de paso por valor y paso por referencia no hacen más que confundir, como demuestra esta discusión. Ya en C confunden, es mucho más sencillo ver que se pasan punteros, que son enteros, y lo que se pasa es su valor. Lo del paso por referencia es una abstracción de Pascal e intentar trasladarla a todas partes lleva a confusiones de este tipo.
    --
    Mi bitácora: Reductio ad Absurdum 2.1 [irreality.eu]
    [ Padre ]