如何获得Kotlin中对象的地址?

时间:2019-01-08 10:03:18

标签: kotlin

一个简单的问题,但我在互联网上看不到任何答案。那么,如何获得Kotlin中对象的地址?

2 个答案:

答案 0 :(得分:5)

要在调试期间识别对象,请使用System.identityHashCode()

无法在Kotlin / JVM上获得对象的地址,并且它也可以随着GC的运行而改变,因此不能用于标识对象。

答案 1 :(得分:1)

JVM中的Kotlin不支持指针,因此(除了一些带有sun.misc.Unsafe类的琐碎玩意儿之外),无法获取变量的地址。

但是,Kotlin / Native(至少早在2018年1月)确实支持指针以使其能够与C代码互操作。以下程序显示了如何获取已在本机堆上分配的变量的地址。似乎无法在特定地址分配变量。

// 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)
}

导致:

Value is 42, address is 0xc149f0