Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/09/2008, 10:46
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 3 meses
Puntos: 454
Respuesta: Problema con "punteros"

Hola:

Lo que me comentas es lo que te estaba diciendo, aunque un poco "camuflado". Te explico.

Cuando a un método le pasas una array (o cualquier otra clase), en realidad estás pasando un "puntero" a la zona de memoria donde está ubicada esa clase. La variable parámetro en sí se pasa por copia, es decir, tu variable array dentro y fuera del método son variables distintas, aunque inicialmente "apuntan" a la misma zona de memoria donde está el array.


Código:
int [] arrayDeFuera = new int [...];
...
public void metodo (int [] arrayDeDentro) {
   // arrayDeDentro y arrayDeFuera "apuntan" al mismo sitio,
   // pero son variables distintas.
...
}
Si haces

arrayDeDentro = new .....

entonces arrayDeDentro apunta ahora a otra zona de memoria, mientras que arrayDeFuera sigue apuntando a la antigua. Los cambios que hagas en los valores de arrayDeDentro se están haciendo en otro sitio y al salir del método se perderán, ya que arrayDeFuera sigue apuntando a la zona de memoria original.

Si haces

int [] aux = new ....
arrayDeDentro = aux;

es exactamente lo mismo. El arrayDeDentro = aux hace que arrayDeDentro "apunte" al mismo sitio que aux, NO copia la zona de memoria de aux sobre la original.

En resumen, aunque dicen que java no tiene punteros, java se entiende mejor si piensas que todas las variables son punteros (a excepcion de los tipos primitivos int, char, long,....)

Se bueno.
__________________
Apuntes Java
Wiki de Programación