Verificación de dos puntos de referencia al mismo objeto en Eclipse
Frecuentes
Visto 1,054 veces
0
Si estoy ejecutando el depurador en Eclipse, ¿cómo verifico para asegurarme de que un campo en una clase apunta al mismo objeto que el campo en otra clase? Configuré puntos de interrupción en ambas clases y estoy bastante seguro de que ambos campos apuntan al mismo objeto, pero ¿cómo verificaría esto? (El código base es demasiado grande para rastrear las referencias).
Creo que Eclipse se encarga de esto, si paso el cursor sobre el campo en cuestión. (Dice, MyClass@79d99e6b. La dirección se refiere al objeto en RAM, ¿verdad?)
3 Respuestas
2
son iguales si tienen lo mismo identityHashCode
contestado el 22 de mayo de 12 a las 20:05
Eso no es del todo cierto, en términos generales. En, por ejemplo, JVM de 64 bits, las direcciones de memoria son demasiado grandes para caber en un int
, por lo que en realidad puede obtener identityHashCode
colisiones - Luis Wassermann
@LouisWasserman Hmmm. Sí, supongo que si las direcciones son demasiado grandes para caber en un int, entonces puede haber colisiones. Y si uno quiere determinar programáticamente que son iguales, entonces ==
debería ser usado. Tengo ganas de rechazar mi propia respuesta :) - Variable miserable
Para ser justos, solo para fines de depuración, esto probablemente sea suficiente, ya que las colisiones aún son bastante raras. - Luis Wassermann
Sí, pero para la depuración, en lugar de evaluar System.identityHashCode(o1) == System.identityHashCode(o2)
también se podría evaluar o1 == o2
, ¿No? - Variable miserable
Según tengo entendido, el depurador de Eclipse proporciona el toString
s de los objetos en cuestión, y los objetos en cuestión tenían el "MyClass@79d99e6b" básico toString
implementación que utiliza el identityHashCode
. Así que mirando el toString
s le diría si el identityHashCode
está emparejado. - Luis Wassermann
2
Una manera fácil en Eclipse es mirando la pestaña de variables en modo de depuración. Si la variable tiene la misma identificación, puede estar seguro de que son la misma referencia. La identificación =? se encuentra debajo del encabezado de valor en la pestaña Variables.
contestado el 22 de mayo de 12 a las 20:05
1
La dirección debe apuntar a la dirección de RAM, sí. No estoy familiarizado con el depurador de eclipse, pero si le está dando una dirección y son iguales para ambos, entonces sí, debería ser la misma referencia.
Además, según el idioma que esté utilizando, puede agregar una pequeña variable que sea un puntero a la dirección del objeto. (por ejemplo, en c ++ es la sintaxis "&x" si x es la variable. Suponiendo que lo recuerde correctamente) Luego puede verificar el valor de sus variables de referencia.
contestado el 22 de mayo de 12 a las 20:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java eclipse or haz tu propia pregunta.
En realidad, IIRC, el depurador de Eclipse menciona con frecuencia una "identificación" para cada objeto que puede ver, y creo que los valores marcados con la misma identificación son en realidad iguales a la referencia. - Louis Wasserman