Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试java应用程序时,在堆栈框架中显示变量的哪些信息_Java - Fatal编程技术网

调试java应用程序时,在堆栈框架中显示变量的哪些信息

调试java应用程序时,在堆栈框架中显示变量的哪些信息,java,Java,当我在Intellij Idea中调试java应用程序时,我看到堆栈框架中的所有变量如下: object={java.lang.Object@77} “@”后面的数字是什么意思?它与hashCode返回的内容不同。hashCode以十六进制表示返回数字2a134eca,以整数表示等于705908426。数字77和705908426是不同的 对象的类,后跟其内存地址。 In {java.lang.Object@77ddeeff}: Class name: java.lang.Object Mem

当我在Intellij Idea中调试java应用程序时,我看到堆栈框架中的所有变量如下:

object={java.lang.Object@77}

“@”后面的数字是什么意思?它与hashCode返回的内容不同。hashCode以十六进制表示返回数字2a134eca,以整数表示等于705908426。数字77和705908426是不同的

对象的类,后跟其内存地址。

In {java.lang.Object@77ddeeff}:
Class name: java.lang.Object
Memory Address: 77ddeeff
所以这个公约name@address就像我们的电子邮件地址一样(abc@gmail.com)abc位于@gmail.com

“@”后面的数字是什么意思

@
只是一个分隔符

调试器使用对象的
toString
方法来显示其值。下面是对
toString
方法的默认实现的描述:

类对象的toString方法返回一个字符串,该字符串由 对象作为实例的类的名称,at符号 字符“@”和哈希的无符号十六进制表示形式 对象的代码。换句话说,此方法返回一个等于 价值:


@是自应用程序启动以来的对象计数。因此@1012表示自应用程序启动以来创建的第1012个对象

它不是身份哈希码。

这里有一些证据:(我这样说是因为我不知道,但我观察到了)

输出: 代码:789451787 代码:java.lang。Object@2f0e140b

789451787=2f0e140b顺便说一下

IntelliJ调试器的输出:

static = org.boon.core.MyClass
args = {java.lang.String[0]@**97**}
object = {java.lang.Object@**98**}
object1 = {java.lang.Object@**99**}
foo = {java.lang.Integer@**100**}"5"
object2 = {java.lang.Object@**101**}
str = {java.lang.String@**102**}"bar"
exception = {java.lang.RuntimeException@**103**}"java.lang.RuntimeException"
我从经验上知道这一点,但我不知道实际实施情况,但我认为这与以下问题有关:

object={java.lang.Object@77}

.

对不起,我还是不明白。默认情况下,hashCode应该返回该对象所在内存地址的整数表示形式。但在Intellij Idea中调试我的应用程序时,堆栈框架中的一个变量显示为object=java.lang。Object@72而toString方法返回java.lang。Object@2a134eca这是用@分隔的类名和哈希代码。数字72和2a134eca是不同的。那么72在这里是什么意思呢?看起来像是创建对象时的分配计数。创建一组对象,您可以看到它们按顺序递增。它可能是每个线程或每个调试运行,不确定。我找不到关于这个的任何文件。。。然而,我很抱歉,但是Sun专有的JVM和OpenJDK在分配哈希代码时通常不使用内存地址。我编写了一个程序,IntelliJ没有使用标识哈希代码。java.lang。Object@2f0e140b != java.lang。Object@98@艾里拉,这不是虚构的答案。toString()不返回内部地址()的字符串。这个答案在这里不好的原因是,当时我认为intellij console打印到字符串(),但事实并非如此。。我本想在这里做的。。。看起来像创建对象时的分配计数。创建一组对象,您可以看到它们按顺序递增。它可能是每个线程或每个调试运行,不确定。我找不到关于这个的任何文件。。。然而
static = org.boon.core.MyClass
args = {java.lang.String[0]@**97**}
object = {java.lang.Object@**98**}
object1 = {java.lang.Object@**99**}
foo = {java.lang.Integer@**100**}"5"
object2 = {java.lang.Object@**101**}
str = {java.lang.String@**102**}"bar"
exception = {java.lang.RuntimeException@**103**}"java.lang.RuntimeException"