RSS

Asignaciones – Paso de Parámetros en Java

28 Sep

El paso de parámetros en Java se hace siempre por valor, ya se trate de un tipo primitivo o de un tipo de referencia, el método trabaja con una copia de la variable.

En el caso de una variable de tipo primitivo, si dentro del método se  modifica la variable, estamos modificando la copia y no la variable original.

En el caso de variables de referencia, si se modifica la variable dentro del método se está modificando una copia de la referencia y no la referencia original. Eso sí, al tener una copia de la referencia que apunta al mismo objeto, sí se puede cambiar el contenido de éste.

Veámoslo con un ejemplo:

class PasoParametros{

    public static void main(String[] args){

    //Para un entero comprobamos que se modifica la copia, despues vuelve a su valor orig.
        int entero = 100;
        System.out.println("Antes de modificar: " + entero);
        modificar(entero);
        System.out.println("Despues de modificar: " + entero);

    //Para un array de un entero, comprobamos que con la copia de la referencia
    //podemos cambiar su contenido.
        int[] array = new int[1];
        array[0] = 100;
        System.out.println("\nAntes de modificar: " + array[0]);
        modificarContenido(array);
        System.out.println("Despues de modificar: " + array[0]);

    //Para el mismo array de entero, comprobamos que no podemos modificar la referencia.
        System.out.println("\nAntes de modificar: " + array[0]);
        modificar(array);
        System.out.println("Despues de modificar: " + array[0]);

    }

    static void modificar(int e){
        e = 200;
        System.out.println("Dentro de modificar: " + e);
    }

    static void modificarContenido(int[] a){
        a[0] = 200;
        System.out.println("Dentro de modificarContenido: " + a[0]);
    }

    static void modificar (int[] a){
    //Creamos un nuevo array "b" y hacemos que "a" apunte a este nuevo array.
    //Funciona solo dentro del metodo, puesto que "a" aquí es una copia.
        int[] b = new int[1];
        b[0] = 300;
        a = b;
        System.out.println("Dentro de modificar: " + a[0]);
    }

}

Resultado de la ejecución:

Anuncios
 
Deja un comentario

Publicado por en 28 septiembre, 2011 en Estudio, Tema 3

 

Etiquetas: , , , , , ,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: