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

博客探讨了Java中对象内存地址的表示以及System.identityHashCode()的含义。内容指出,输出的特殊字符串实际上是类名加上@符号和对象的标识哈希码,并非直接的内存地址。Java中获取变量内存地址没有意义,因为JVM可能会移动对象。同时,文章通过示例展示了如何使用sun.misc.Unsafe获取对象在内存中的位置。
摘要由CSDN通过智能技术生成

问题

请看下面的图片。当我们用java创建一个带有new关键字的对象时,我们从OS获取一个内存地址。

当我们写out.println(objName)时,我们可以看到一个"特殊"字符串作为输出。我的问题是:

这是什么输出?

如果它是操作系统给我们的内存地址:a)如何将此字符串转换为二进制? b)如何获得一个整数变量地址?

4ebae65a-ed55-48e4-93a4-21cb310ccb62.png

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值