当我在Intellij中调试java应用程序时,我看到堆栈框架中的所有变量,如下所示:
object={java.lang.Object@77}
"@“后面的数字是什么意思?它不同于hashCode返回的内容。hashCode在十六进制表示中返回数字2a134eca,在整数表示中等于705908426。数字77和705908426是不同的。
发布于 2013-10-21 18:20:46
@是应用程序启动后的对象计数号。所以@1012意味着自应用程序启动以来创建的第1012个对象。
,这不是身份哈希码.
这里有一些证据:(我这么说是因为我不知道,但我观察到了)
public static void main(String [] args) throws Throwable {
Object object = new Object();
Object object1 = new Object();
Integer foo = new Integer(5);
Object object2 = new Object();
String str = new String("bar");
System.out.println("code :" + System.identityHashCode(object));
RuntimeException exception = new RuntimeException();
exception.printStackTrace(); //put breakpoint here
}
输出:代码: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"
我从经验上知道这一点,但我不知道实际的实施情况,但我认为这与以下问题有关:
发布于 2013-10-21 01:21:27
"@“后面的数字是什么意思?
@
只是一个分隔符
调试器使用对象的toString
方法显示其值。下面是对来自toString
的javadocs方法的默认实现的描述
类对象的toString方法返回一个字符串,该字符串由对象为实例的类的名称、符号字符‘@’和对象的哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回的字符串等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
发布于 2013-10-21 01:16:38
类的对象,后面跟着它的内存地址。
In {java.lang.Object@77ddeeff}:
Class name: java.lang.Object
Memory Address: 77ddeeff
因此,这个约定名称@address就像我们的电子邮件地址一样(abc@gmail.com) abc位于@ gmail.com
https://stackoverflow.com/questions/19490428
复制