vscode vscjava visual studio not located how extension debug could code java debugging intellij-idea

vscjava - Descifrar información variable al depurar Java



vscode extension vscjava vscode java pack (2)

Estoy usando IntelliJ IDEA 8 para depurar algunos Java, pero esta pregunta probablemente podría aplicarse a todos los depuradores de Java. En la lista de variables, se muestran como:

myVariable = {some.package.SomeClass@12345}

Tengo curiosidad sobre el número que viene después del nombre de la clase. ¿Cuál es el número exactamente? ¿Dos variables tendrán el mismo número si es el mismo objeto subyacente al que se hace referencia?

Gracias por adelantado.


Eso es lo que informa la JVM, para más detalles, consulte la especificación JDWP .

Identifica de manera única un objeto en la VM objetivo. Un objeto particular se identificará exactamente con un ID de objeto en los comandos y respuestas de JDWP a lo largo de su duración (o hasta que el ID de objeto esté dispuesto explícitamente). Un ObjectID no se reutiliza para identificar un objeto diferente a menos que se haya dispuesto explícitamente, independientemente de si el objeto al que se hace referencia ha sido recolectado como basura. Un objectID de 0 representa un objeto nulo. Tenga en cuenta que la existencia de un ID de objeto no impide la recolección de basura del objeto. Cualquier intento de acceder a un objeto recogido basura con su ID de objeto dará como resultado el código de error INVALID_OBJECT. La recolección de basura se puede desactivar con el comando DisableCollection, pero generalmente no es necesario hacerlo.


Parece que es solo un resultado directo de String generado cuando una clase no anula a String con su propia implementación.

Si ese es el caso (que puede verificar reemplazando a String y viendo si obtiene un resultado diferente), según la documentación de Java para Object ( http://java.sun.com/j2se/1.5.0/docs/api) /java/lang/Object.html ) la implementación predeterminada para toString es:

getClass().getName() + ''@'' + Integer.toHexString(hashCode())

Hashcodes, a qué número te refieres, son bastante complicados. De nuevo, desde la documentación de Java en Object, hashcode se implementa con el siguiente contrato:

The general contract of hashCode is: * Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. * If two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. * It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.

Entonces, respuesta corta, el número no significa que es la misma referencia de objeto. Pueden tener los mismos valores almacenados, pero incluso eso no es un hecho.