问题
请看下面的图片。当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址。
当我们写out.println(objName)时,我们可以看到一个"特殊"字符串作为输出。我的问题是:
这是什么输出?
如果它是操作系统给我们的内存地址:a)如何将此字符串转换为二进制? b)如何获得一个整数变量地址?
#1 热门回答(130 赞)
这是由'@'字符分隔的类名和System.identityHashCode()。标识哈希码表示的是特定于实现的。它通常是对象的初始内存地址,但随着时间的推移,VM可以在内存中移动对象。所以(简单地说)你不能依赖它作为任何东西。
获取变量的内存地址在Java中是没有意义的,因为JVM可以自由地实现对象并在它看起来合适时移动它们(你的对象可能/将在垃圾收集等过程中移动)
#2 热门回答(21 赞)
有可能使用sun.misc.Unsafe:从@Peter Lawrey看到这个很棒的答案 - > Is there a way to get a reference address?
使用printAddresses()的代码:
public static void printAddresses(String label, Object... objects) {
System.out.prin