You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中如何获取并打印List类型对象的内存地址引用

Scala 获取List实例内存地址的实现方法

Scala 运行在JVM平台之上,标准库没有直接提供获取对象内存地址的原生API,你可以通过以下两种方案实现需求:


方案1:使用JDK自带的System.identityHashCode()(无第三方依赖)

该方法返回的是对象的身份哈希值,默认与对象的内存地址强关联,可以作为内存地址的近似标识使用,适合普通场景快速验证实例是否为同一个对象。
代码示例:

val fruits: List[String] = List("apple", "orange", "pear")
// 转换为十六进制输出更符合常规内存地址的展示格式
println(s"fruits实例的近似内存地址标识:0x${System.identityHashCode(fruits).toHexString}")

注意:该结果和fruits.hashCode()的返回值完全不同。Scala的List重写了hashCode()方法,会基于集合内的元素内容计算哈希值,两个内容完全相同的不同List实例会返回相同的hashCode(),但System.identityHashCode()是基于实例本身生成的,不同实例返回的结果一定不同。

验证示例:

val fruits1: List[String] = List("apple", "orange", "pear")
val fruits2: List[String] = List("apple", "orange", "pear")

// 内容相同,hashCode一致
println(s"fruits1的内容哈希值:${fruits1.hashCode()}")
println(s"fruits2的内容哈希值:${fruits2.hashCode()}")

// 实例不同,identityHashCode不一致
println(s"fruits1的实例标识:0x${System.identityHashCode(fruits1).toHexString}")
println(s"fruits2的实例标识:0x${System.identityHashCode(fruits2).toHexString}")

方案2:使用JOL工具获取精确内存地址

如果你需要获取对象的真实精确内存地址、查看对象内存布局,可以使用OpenJDK的JOL(Java Object Layout)工具,适合底层内存分析、性能调优场景使用。
代码示例:

import org.openjdk.jol.info.ClassLayout
import org.openjdk.jol.util.VMSupport

val fruits: List[String] = List("apple", "orange", "pear")

// 打印对象完整内存布局
println(ClassLayout.parseInstance(fruits).toPrintable())
// 直接输出精确内存地址
println(s"fruits实例的精确内存地址:0x${VMSupport.addressOf(fruits).toHexString}")

使用该方案需要先在项目中引入JOL的相关依赖即可。


内容的提问来源于stack exchange,提问作者sahar karimzadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:45:03