【发布时间】:2017-02-15 04:57:41
【问题描述】:
毫无疑问,这个问题已经被问过(可能很多次了),但我找不到正确的关键字来找到它们。
基本上,我的问题是关于对象引用。我所知道的是对象引用指向内存上的对象物理位置。但是,当我调试代码时,每次调试时,我都会得到同一个对象的不同对象引用。
例如,当我第一次调试我的代码时,按钮的引用看起来像
信息 [sysout] [AWT-EventQueue-0] [Ljava.awt.event.ComponentListener;@28be012c
第二次是
信息 [sysout] [AWT-EventQueue-0] [Ljava.awt.event.ComponentListener;@31a056d8
我的相关问题是;
1.(@)符号后面的部分(又名@28be012c)是否引用了对象,如果是,它是类似ip地址的东西,不断变化?
2.有没有办法获取一个不随时间变化的地址(如Mac地址)
任何与这些问题相关的答案或链接将不胜感激。
编辑
我正在这种情况下进行调试。有一个按钮,每次单击此按钮时,调试器都会停止。也就是说,程序不是从头开始的。
【问题讨论】:
-
请定义
"each time I debug"。你的意思是你每次都重新运行程序吗?如果是这样,那么您应该不会对每次运行时对象的 hashCode 发生变化感到惊讶。 -
@HovercraftFullOfEels 我编辑了我的答案。
-
如果你在
IDE,那么你也可以跳回去;) -
@HelloWorld 我发现 jump back 在调试器中不一致。
-
当“toString()”方法未被覆盖时,您通常会看到类似“SomeClassName@28be012c”的输出。您可以通过覆盖“toString()”来获得一些有用的东西。我不确定,因为我不确切知道您在寻找什么(即您想知道对象在内存中的位置还是只想能够唯一且重复地识别对象)
标签: java object reference pass-by-reference