java 变量地址_Java中变量的内存地址

问题

请看下面的图片。当我们用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.print(label +

问题 请看下面的图片。当我们用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.print(label +
经验分享 程序员 微信小程序 职场和发展