Parámetros en Java: ¿Valor o Referencia?

Hoy revisando algunos libros de Java, me encontré con algunos en donde sorprendentemente dicen una GRAN mentira. De hecho, muchos sitios en internet manejan que el paso de parámetros en Java se hace de dos formas:

  1. Si se tratan de tipos primitivos como int, double, etc. el paso se da por valor o copia.
  2. Si se tratan de Objetos (en realidad son referencias a objetos) entonces el paso de valor se hace por referencia.

NO hay nada más equivocado que esta idea, lo lamentable es que incluso sean los autores de libros, los “conocedores” y expertos de la materia los que caigan en tan infantil error. Uno de los autores de los que hablo es un Español muy conocido cuyo nombre empieza con F…. otro autor que me parece es mexicano y si bien recuerdo es de la misma editorial que el primer autor que menciono y cuyo apellido también empieza con la letra F afirma del mismo modo que Java hace el paso de parámetros por referencia y cuyo libro/tutorial esta pegado en la página de un Instituto Tecnológico de aqui en México.

Y bueno ni se digan de varias páginas en donde se habla de lo mismo, por ejemplo: http://es.wikibooks.org

En fin, encontré un artículo que me parecio interesante: http://jpangamarca.wordpress.com/cafe-java/en-java-el-paso-de-parametros-es-por-valor/

donde desmiente ese mito de que Java hace el paso de parámetros por Referencia, dejando en claro que únicamente se hace por VALOR.

Si alguno tiene dudas sobre este tema de las Referencias de Objetos, comentela aqui y en la medida de mi tiempo trataré de brindarle alguna explicación.

Saludos!!

2 Responses to “Parámetros en Java: ¿Valor o Referencia?”

  1. Bueno, depende como se lo interprete. Los objetos sí se pasan por referencia, lo que se pasa por valor es la referencia al objeto.

    Igual estyo de acuerdo en que es bueno aclarar todo eso y no dar una visión parcial que puede llevar a confusiones.

  2. Cuando se pasa un parámetro a otro método se hace una copia de la referencia y NO se le pasa la dirección de memoria (que es a lo que llamamos paso por referencia), pues si esto ultimo fuera verdad el siguiente método modificaria el valor original…

    public static void intercambiar(Empleado x, Empleado y)
    {
    Empleado temp = x;
    x = y;
    y = temp;
    }

    ……
    Empleado a = new Empleado(”Alicia”….);
    Empleado b = new Empleado(”Benito…);
    intercambiar(a,b)

    ¿Se refiere ahora “a” a Benito y b a alicia?… NO

    Pero como se trata de una COPIA de la referencia al objeto, unicamente se modifica la copia y no el original. SI se tratara de un paso por referencia, ambos serían el mismo objeto en si, por lo cual, al tratar de referenciar:

    x = y …. entonces también “temp” apuntaria al mismo objeto y por lo cual si habría una modificación al objeto original.

    saludos!!

Leave a Reply