Verificación de dos puntos de referencia al mismo objeto en Eclipse

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?)

preguntado el 22 de mayo de 12 a las 20:05

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. -

3 Respuestas

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 toStrings 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 toStrings le diría si el identityHashCodeestá emparejado. - Luis Wassermann

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

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 or haz tu propia pregunta.