假设
Integer integerA = 500;
我想打印返回的引用。
最佳答案
要以数字形式获取对对象的引用,您可以在支持它的 JVM 上使用 Unsafe。您可以将引用放在数组中并使用 Unsafe.getInt() 访问它以获得 32 位引用(注意:大多数 64 位 JVM 将使用 32 位引用)或 Unsafe.getLong() 这将访问引用作为一个数字,但如果发生 GC 并且对象被移动,它可能会在您获得它后立即改变。
另一个复杂的问题是,CompressedOops 意味着可以用多种不同的方式转换对象的索引。为了简单起见,我建议使用 4 GB 到 26 GB 的堆。对于这些大小,您将地址移动 << 3
获取地址。
顺便说一句,您可以使用 Unsafe.putInt(x, 1, hashCode) 来覆盖系统 hashCode。 ;)
关于Java:如何打印整数对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18030739/