Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取Kotlin中对象的地址?_Kotlin - Fatal编程技术网

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

如何获取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中获取对象的地址呢?

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

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


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

你说的“地址”是什么意思?@Roland我指的是内存中的对象地址一般来说,你不能。你为什么要这么做?您想实现什么?@gidds在某些情况下,我想跟踪内存中的对象以进行调试。您可能想了解内存地址和Java。。。您不应该直接访问对象的内存地址。。。关于这方面的一些有趣的问题:,从那里开始,只需跟着重复;-)如果您真的想要JVM中某个对象的地址,请参考,或者这正是我想要的。
Value is 42, address is 0xc149f0