对象的引用在每次调试中都会发生变化

The reference of the object changes in every debug

毫无疑问,这个问题已经被问过(可能被问过很多次)但是我找不到正确的关键字来找到它们。

基本上,我的问题是关于对象引用的。我所知道的是对象引用指向对象在内存中的物理位置。但是,当我调试我的代码时,每次调试时,我都会得到同一对象的不同对象引用。

例如,当我第一次调试我的代码时,按钮的引用看起来像

INFO [sysout] [AWT-EventQueue-0] [Ljava.awt.event.ComponentListener;@28be012c

第二次是

INFO [sysout] [AWT-EventQueue-0] [Ljava.awt.event.ComponentListener;@31a056d8

我的相关问题是;

1.Is(@)符号后的部分(a.k.a@28be012c) 对象的引用,如果是,就是ip地址之类的东西,不断变化?

2.Is 有一种获取地址的方法,该地址不会随时间改变(如 Mac-地址)

任何与这些问题相关的答案或 link 将不胜感激。

编辑

我正在调试这个场景。有一个按钮,每次单击此按钮时,调试器都会在此时停止。也就是说程序不是从头开始的

Is the part after (@) symbol (a.k.a @28be012c) reference to the object, if yes, it is something like ip address, which changes continiously?

@之后的部分是Integer.toHexString(hashCode());hashCode 方法并非设计为每次为不同的 运行 调用时 return 相同的值(即使正在创建的对象具有相同的值)。 returned 值与内存相关也不是强制性的。 JVM 规范指定唯一值应为 returned,但未指定 "how".

Is there a way to obtain an address, which does not change over time (like a Mac-adress)

没有。 JVM 的每个 运行 几乎总是会给出不同的哈希码(除非您将 hashCode 方法重写为 return 其他方法。