gpt4 book ai didi

scala - Scala对象的唯一ID

转载 作者:行者123 更新时间:2023-12-04 14:00:26 26 4
gpt4 key购买 nike

在Python中,id(x)给出对象x的唯一ID。 Scala中的等效项是什么?

>>> id(True)
1166096
>>> id(False)
1166108
>>> x = id([1,2,3])
>>> id(x)
2058589988
>>> y = id([1,2,3])
>>> id(y)
2058589976

我可以使用x.hashCode作为id,但是当内容相同时,它将返回相同的值。我想知道在以下代码中是什么使 a eq b == false产生的。在 a eq b中比较什么值?
scala> val a = ArrayBuffer(1,2,3)
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

scala> val b = ArrayBuffer(1,2,3)
b: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3)

scala> a.hashCode
res44: Int = 387518613

scala> b.hashCode
res45: Int = 387518613

scala> a eq b
res39: Boolean = false

最佳答案

这是不可能的。您需要自己生成并跟踪ID。
eq比较引用,并且类似于Java中的==

System.identityHashCode(这是Any.hashCode的默认实现),但不能保证它是唯一的。

您可能可以使用JNI来实现id,尽管由于可能存在压缩GC的原因,它可能并非易事。我对JNI不太了解。

即使那样,我也没有将id视为有用的函数,也没有看到任何用处。如果需要对对象的引用,请存储引用。如果需要弱引用,请使用java.lang.ref.WeakReference[T]

关于scala - Scala对象的唯一ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24060121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com