Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/11/2009, 22:25
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 17 años
Puntos: 260
Sonrisa Respuesta: por que a mi??

Hola,

En Java los parámetros de tipos de datos primitivos se pasan por valor. Por valor significa que el parámetro es una 'copia' de la variable y al cambiarle su valor se cambia la copia y no el original.

Los parámetros de objetos también se pasan por valor, pero en este caso el valor es un 'puntero' (1) que hace referencia al objeto original; si se cambia el puntero no afecta el original, pero si se cambian los valores a los cuales hace referencia, estos últimos si cambian.

Por ejemplo:

referencias.java
Código Java:
Ver original
  1. public class referencias {
  2.  
  3.     public void f(int a) {
  4.         a++;
  5.     }
  6.    
  7.     public void f(int[] a) {
  8.         a[0]++;
  9.     }
  10.    
  11.     public referencias() {
  12.         int a = 5;
  13.         System.out.println(a); // 5
  14.         f(a);
  15.         System.out.println(a); // 5
  16.        
  17.         int[] c = { 5 };
  18.         System.out.println(c[0]); // 5
  19.         f(c);
  20.         System.out.println(c[0]); // 6
  21.     }
  22.  
  23.     public static void main(String[] args) {
  24.         new referencias();
  25.     }
  26.  
  27. }

El valor de la variable no cambio en la primera llamada a f(), porque se paso por valor y se cambió la 'copia'. En la segunda llamada a f() se pasó una referencia a un objeto de tipo Array, y en este caso el primer valor del Array se cambió a donde apuntaba c[0].

Tendrías que cambiar el código para que regrese un valor del tipo enumerado,

Código Java:
Ver original
  1. public Direccion girarSentidoReloj (Direccion direccion) {
  2.   switch (direccion) {
  3.   case ARRIBA:
  4.     return Direccion.DERECHA;
  5.   ...
  6.   }
  7.   return null;
  8. }
Y recibir los valores en la misma variable,

Código Java:
Ver original
  1. Dirección d = Direccion.ARRIBA;
  2. d = d.girarSentidoReloj(d);
Saludos,

(1) En Java no existen los punteros, solamente referencias, pero es más fácil comprender que apuntan hacia algún dato o hacen referencia al mismo.