Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con "punteros"

Estas en el tema de Problema con "punteros" en el foro de Java en Foros del Web. Hola, tengo una duda: Si tengo una variable tipo String [] y la mando por argumento por ejemplo al metodo de una clase, cuando termina ...
  #1 (permalink)  
Antiguo 10/09/2008, 21:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Problema con "punteros"

Hola, tengo una duda:

Si tengo una variable tipo String [] y la mando por argumento por ejemplo al metodo de una clase, cuando termina esa clase y mi programa continua, en la variable String[] tengo los datos actualizados si es que dentro del metodo se modifico.

OK, porque con una variable tipo byte [] porque no ocurre esto ? hago lo mismo, y cuando termina la clase y continua mi programa no veo los datos modificados que se modificaron dentro de la clase.

Es bastante raro pero me pasa. alguien sabe como es? como se podria solucionar? etc?

Estaba acostumbrado a trabajar con direcciones y punteros en C, aun tampoco logro descubrir como mandar la direccion de una variable comun sin que sea array y vea los datos modificados.......

alguien sabe estos 2 dudas?

pd: ya se que aca no hay punteros... uds entendieron lo q quiero decir :D

salu2

Última edición por razer; 10/09/2008 a las 22:07
  #2 (permalink)  
Antiguo 10/09/2008, 23:21
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con "punteros"

Hola:

En ambos casos debería comportarse igual. Posiblemente tengas alguna diferencia en el código.

Por ejemplo, si dentro del método haces el new del array, entonces no se verán los cambios fuera. Si el array ya está creado cuando se lo pasas al método y no haces el new dentro del método, los cambios sí se verán.

Código:
//Así sí se ven los cambios
int [] array = new int[10];
metodo (array);
....
public void metodo (int [] array) {
   array[0] = ....;
   array[1] = ....;
}

Cita:
// Así NO se ven los cambios
int [] array;
metodo (array);
....
public void metodo (int [] array) {
array = new int [10];
array[0] = ....;
array[1] = ....;
}
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 11/09/2008, 09:51
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Problema con "punteros"

Si, eso lo tenia claro.
De todas formas me ayudaste a encontrar el error :P gracias.

No sabia que pasaba esto, pero lo cuento (con el ejemplo del byte[] que recibe como arg):

si dentro del metodo por ejemplo en otro byte [] auxiliar pones los datos y despues haces
Datos = auxiliar (siendo datos el que recibio por argumento, que se tiene que modificar)
no se modifica. (y en el metodo ves todo copiado bien)

si en cambios vas copiando con un for elemento por elemento, si se modifica.
realmente lo pude solucionar pero no termine de entender porque pasa esto...... :P

saludos
  #4 (permalink)  
Antiguo 11/09/2008, 10:46
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 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
  #5 (permalink)  
Antiguo 11/09/2008, 10:52
 
Fecha de Ingreso: marzo-2008
Mensajes: 237
Antigüedad: 16 años, 1 mes
Puntos: 6
Respuesta: Problema con "punteros"

Ahhh claro, es porque estaba apuntando a otra direccion de memoria.
ya entendi :d

muchas gracias!!!!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:22.