如何获取Kotlin中对象的地址?
这个问题很简单,但我在网上没有看到任何答案。那么,如何在Kotlin中获取对象的地址呢?JVM中的Kotlin不支持指针,因此(除了与sun.misc.Unsafe类的一些诡计)无法获取变量的地址 然而,Kotlin/Native(至少在2018年1月)确实支持指针,使其能够与C代码互操作。下面的程序显示如何获取已在本机堆上分配的变量的地址。似乎不可能在特定地址分配变量如何获取Kotlin中对象的地址?,kotlin,Kotlin,这个问题很简单,但我在网上没有看到任何答案。那么,如何在Kotlin中获取对象的地址呢?JVM中的Kotlin不支持指针,因此(除了与sun.misc.Unsafe类的一些诡计)无法获取变量的地址 然而,Kotlin/Native(至少在2018年1月)确实支持指针,使其能够与C代码互操作。下面的程序显示如何获取已在本机堆上分配的变量的地址。似乎不可能在特定地址分配变量 // Kotlin Native v0.5 import kotlinx.cinterop.* fun main(args
// Kotlin Native v0.5
import kotlinx.cinterop.*
fun main(args: Array<String>) {
val intVar = nativeHeap.alloc<IntVar>()
intVar.value = 42
with(intVar) { println("Value is $value, address is $rawPtr") }
nativeHeap.free(intVar)
}
要在调试期间识别对象,请使用
System.identityHashCode()
在Kotlin/JVM上无法获取对象的地址,而且它也可以随着GC的运行而更改,因此它不能用于标识对象。你说的“地址”是什么意思?@Roland我指的是内存中的对象地址一般来说,你不能。你为什么要这么做?您想实现什么?@gidds在某些情况下,我想跟踪内存中的对象以进行调试。您可能想了解内存地址和Java。。。您不应该直接访问对象的内存地址。。。关于这方面的一些有趣的问题:,从那里开始,只需跟着重复;-)如果您真的想要JVM中某个对象的地址,请参考,或者这正是我想要的。
Value is 42, address is 0xc149f0