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

Variable me cambia de valor magicamente

Estas en el tema de Variable me cambia de valor magicamente en el foro de Java en Foros del Web. Buenas tardes, estoy aquí porque tengo una duda con una parte de mi código, es la siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código JAVA: Ver original for ( ...
  #1 (permalink)  
Antiguo 29/12/2012, 09:24
 
Fecha de Ingreso: septiembre-2012
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Variable me cambia de valor magicamente

Buenas tardes, estoy aquí porque tengo una duda con una parte de mi código, es la siguiente:
Código JAVA:
Ver original
  1. for (int ind=0;ind<check.size();ind++){                
  2.                    
  3.        Place content = check.get(ind);    
  4.        if (ind==0){
  5.              aux = content;                            
  6.              lugares.add(aux.getName());
  7.         }
  8.                        
  9.           if (content.getAddress()==aux.getAddress())
  10.               lugares.add(content.getName());
  11.                aux=content;
  12.           }
  13.  }

Antes del if content tiene de valor lo que ha recibido del método check.get(ind), pero cambia de valor cuando entra en cualquier rama del if. Cambia al valor pimero del ArrayList check.
¿alguien sabe por qué?

gracias de antemano.
  #2 (permalink)  
Antiguo 30/12/2012, 02:41
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Variable me cambia de valor magicamente

Hay dos if, ¿a cual te refieres? ¿Qué tiene antes y qué tiene después la variable content?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 30/12/2012, 05:30
 
Fecha de Ingreso: septiembre-2012
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Variable me cambia de valor magicamente

A cualquiera de los dos, da igual en qué if entre que el valor de content cambia. Seguramente tenga que ver con las direcciones de memoria. Como cada variable apunta a una dirección de memoria donde se encuentra el valor, no sé si al hacer la asignación "a pelo" da algún problema. Pero es que cambia antes de hacer la asignación. (Tenía trazas pero las borré para no llenar el foro d líneas de código). No se si sabréis algo al respecto.
  #4 (permalink)  
Antiguo 30/12/2012, 06:26
 
Fecha de Ingreso: septiembre-2012
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Variable me cambia de valor magicamente

Ya que toda información es poca, he comprobado que al salir de los if (tanto del primero como del segundo la variable vuelve a tener su valor adecuado :S
  #5 (permalink)  
Antiguo 30/12/2012, 12:19
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Variable me cambia de valor magicamente

Imaginate un objeto cuya clase solo tiene dos variables, nombre y valor, con sus correspondientes getters y setters.

Si haces lo siguiente:

Obj principal = new Obj(nombre,valor1);
Obj aux = principal;
aux.setValor(valor2);

Observarás, creo q a partir de java 5, que principal también cambia su valor a valor2.

Siquiendo esta lógica, seguramente encuentres donde está el origen de tu problema.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #6 (permalink)  
Antiguo 31/12/2012, 04:38
 
Fecha de Ingreso: septiembre-2012
Mensajes: 23
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Variable me cambia de valor magicamente

Claro, cambia también principal porque al hacer
Obj aux = principal, lo que estás haciendo es apuntar a la misma dirección de memoria donde se encuentra "valor1". No se hace una copia de la variable con ese mismo valor.
Si haces aux.setValor(valor2); entonces cambiará "valor1" a "valor2", pero principal sigue apuntando a esa misma dirección de memoria, luego tiene de valor "valor2".

De todas maneras muchas gracias porque al menos ya sé lo que sucede exactamente. Pero sigo sin saber cómo solucionarlo.
Uizás con el método clone(); ??


Gracias.

Última edición por serdj; 31/12/2012 a las 04:51
  #7 (permalink)  
Antiguo 31/12/2012, 10:57
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Variable me cambia de valor magicamente

Puedes usar clone() o una implementación similar:

Obj principal = new Obj(nombre,valor1);
Obj principal = new Obj();
aux.setNombre(principal.getNombre());
aux.setValor(principal.getValor());
// si imprimes aqui veras valor1
aux.setValor(valor2);
// Si imprimes el valor de principal veras valor1 y si imprimes valor de aux veras valor2
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: variables, cambios
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 21:04.