lunes, 14 de julio de 2014

Modulo 3: Paso de parámetros

En java puedes pasar parámetros por valor o por referencia.

Paso por valor: significa que le pasas un copia del valor que tiene una determinada variable y esto sólo es posible para tipos de datos creados por java (int, Integer, String, short, Short, etc. ).

Paso por referencia: Este existe para los tipos de datos creados por java y los de usuario, sólo que se comportan de forma un tanto diferente. En general consiste en pasar la referencia (dirección) dónde se encuentra el objeto creado, es decir, es pasar el *control total del objeto para que éste pueda ser modificado.

*En el caso de los tipos de datos de java no se ofrece el control total, sino que se se le pasa una copia de la referencia y se tiene su propia copia, cuando el objeto cambia no se ve afectado en la variable anterior.
Ejemplo:

//En el main
int x = 5;
int y;
suma(x, y); //se pasa una copia de la referencia de x y de y.
System.out.println(x); //el resultado no se afecto y es 5

suma(5, 4); se pasa directamente el valor.

//fuera del main
static void suma (int x, int y){ /
x++;
System.out.println(""+(x + y));

}

De alguna manera podemos decir que en los datos nativos de java sólo existe el paso por valor aunque hay dos formas de hacerlo como ya lo pudimos ver.

* Para el caso de los tipos de datos creados por el usuario ahí sólo existe en paso por referencia y es precisamente lo que explicaba anteriormente.
Ejemplo :

class Persona{
private String nombre;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

}

class TestPersona{
    public static void main(String[] args) {
        Persona p = new Persona(); //se crea un objeto de la clase persona
        p.setNombre("Pedro"); //le pone un nombre a la persona.
        System.out.println(""+p.getNombre());// vemos que ya tiene nombre
        cambiaNombre(p);
        System.out.println(""+p.getNombre()); //nos muestra el nombre
    }
   
    public static void cambiaNombre(Persona p){
        p.setNombre("Juan");
    }
}

Como se puede ver se le paso el control total del objeto para que lo modificara.