Mundo Byte

Acercando el conocimiento de TI en términos sencillos

I. Paso de parámetros en Java: Por Valor

Después de varios meses de no escribir en el Blog, he decidido responder a una serie de cuestionamientos sobre el tema de “Paso de parámetros en Java” donde desafortunadamente existe mucha confusión al respecto y por ende he recibido comentarios en donde dicen que yo no tengo idea de lo que hablo. Pero bueno, aclaremos ahora todo esto y veamos en donde esta el meollo del asunto o el asunto del meollo.

Ocupare material elaborado por mi en un curso que impartí sobre Java. Barreré como a la hojarasca!

 

Introducción

image

Variables primitivas.

Básicamente consisten en variables de alguno de los tipos primitivos.

Variables de Referencia.

También se les llama variables de objeto. Estas variables no son el objeto mismo, son solo una referencia al objeto. Imaginemos tener una variable de tipo Date.

private Date fechaLimite;

Al crear el objeto con el operador new, sucede algo como lo mostrado en la imagen de abajo.

image

fechaLimite no es el objeto en si, más bien es una referencia al objeto Date.

En Java, el valor de toda variable de objeto es una referencia de un objeto que reside en algún otro lugar. El valor proporcionado por el operador new también es una referencia.

La expresión new Date() crea un objeto del tipo Date, y su valor es una referencia del objeto recién creado. Esa referencia se almacena entonces en la variable fechaLimite. Las referencias de objeto son equivalentes a los punteros de C++, sin embargo, en Java no es posible manejar punteros y la administración de memoria es una tarea del Garbage Collector.

 

Existe Existe en la terminología de las Ciencias Computacionales para el paso de parámetros a los métodos.

Paso por valor o copia. Significa que el método obtiene solamente el valor (una
copia) que proporciona quien hace la llamada.

● Paso por Referencia. Significa que el método recibe la ubicación de la variable
que proporciona quien hace la llamada.

 

Ahora si, una vez aclarado lo anterior, podemos comenzar a desmentir a esa falsa creencia que tienen algunos de mis lectores del blog y muchísima más gente conocedora de C++ pero no de Java y piensan que todo es igual en Java.

8 Responses to I. Paso de parámetros en Java: Por Valor

  1. Pingback: Parámetros en Java: ¿Valor o Referencia? « Mundo Byte

  2. ing_sergio febrero 4, 2010 a las 8:36 pm

    Hola yo creo que si se puede pasar valores por referencia…. O si no expliquenme esto

    int bytesleidos;
    char [] charleidos = new char [4*1024];
    //digamos que ya tenemos instaciado un objeto de tipo bufferedreader llamado entrada…..

    bytesleidos=entrada.read (charleidos);

    bien como vemos en bytesleidos se guarda el numero de bytes leidos en el archivo x, si esta archivo tiene 726 bytes en bytesleidos = 726. Igualmente en el arreglo charleidos deben estar los caracteres leidos en el archivo x….

    La unico forma (que veo) es que charleidos sea pasado por referencia y en ese caso sea produzca una especie de retorno multiple..

    como bien sabemos la funcion read retorna un entero,
    pero si depues de lo anterior agregamos

    for(int i=0; i<bytesleidos; i++) System.out.print(""+charleidos[i])

    aparece todo el contenido del archivo de texto…

    Les dejo la duda…..
    si hay alguna respuesta les agradeceria
    andres.1123@yahoo.com

  3. victor marzo 15, 2010 a las 11:51 am

    Cuando pasas un objeto por parametro pasas la direccion de memoria donde se encuentra el objeto almacenado en memoria, dentro de la función podremos utilizar la referencia para modificar el objeto, ya que con lo que realmente trabajamos es con la direccion de memoria donde se almacena el objeto por lo que cualquier cambio que se efectue dentro de la función se vera fuera de esta.

  4. victor marzo 15, 2010 a las 11:52 am

    no estas pasando una copia del objeto, ni una copia de la referencia estas pasando la direccion de memoria donde esta almacenado el objeto ORIGINAL.

  5. victor marzo 15, 2010 a las 11:57 am

    perdon, lo que pasas es una copia por valor de la REFERENCIA, por lo que estas pasando una copia de la dirección de memoria donde esta almacenado el objeto, luego modificas el objeto siendo visibles los cambios fuera de la función.

  6. ddenver agosto 24, 2010 a las 5:47 pm

    tendria que estar la parte visual y no porque me guste visual basic pero es bueno que esten escalarecidas las variables

  7. Gustavo febrero 18, 2012 a las 7:11 pm

    Agradecería a windoctor que contestara lo que “mis colegas” en java han dicho, me parece una falta de educación el poner cartas sobre la mesa y no querer jugar.

    Admito que windoctor tiene razón en cuanto a que siempre el paso de parámetros es por valor,
    pero hay que ver la diferencia en los tipos primitivos y en los de tipo referencia o “tipo objeto”.
    Saludos y no se compliquen mucho la vida :D

  8. WinDoctor marzo 2, 2012 a las 3:34 am

    Hola Gustavo!

    Hay cosas mayores que considerar falta de educación que el hecho de no responder a unos cuestionamientos. Si no los respondo es sencillamente por el hecho de que dadas las referencias que puse al final de la tercera parte del artículo y aun así aferrarse a las ideas de que Java también usa el paso por referencia es algo inútil. Las referencias de donde me baso para afirmar lo que digo hablan por si solas y creo que el artículo leido en su totalidad en las 3 partes, es más que contundente como para volver a debatir sobre lo que ya esta dicho :)

    Saludos!!

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.

Únete a otros 187 seguidores