gpt4 book ai didi

java - 扩展 AnyVal 和 AnyRef 的对象的内存分配有什么区别

转载 作者:行者123 更新时间:2023-12-02 12:48:21 25 4
gpt4 key购买 nike

因此,在 Java 中,我们看到基本类型比对象类型占用更少的内存空间。例如,intInteger 实例占用的空间更少。因此,使用 char 而不是 String 来存储单个字符通常更明智。

我想了解如何将其转换为 Scala。没有基元。我们拥有的只是 AnyValAnyRef 的实例。每个的内存分配之间有区别吗?

最佳答案

当然,实际上有原语。 Scala 只是(故意)试图隐藏差异。

实际上有 4 种情况,而不是 2 种:

  1. 扩展 AnyRef 的类。它们只是普通的 Java 风格的类,并且具有相同的内存使用。

  2. 单位。它对应于 Java void,因此通常在运行时根本不表示。如果是这样,则使用 BoxedUnit 类。

  3. IntBoolean 等。虽然它们在 Scala 代码中看起来像类,但它们通常表示为 JVM 原语。但在某些情况下,它们不能,而是使用装箱类型(Integer 等)。也就是说,当它们是泛型类型/方法的参数时,除了Array

  4. 用户定义的值类。请参阅 Yuval Itzchakov 的回答。当然,如果您有一个包装原语的值类,那么它最终会被表示为原语本身。请注意,它们并不总是在运行时表示为基础类型,特别是 Array[ValueClass] 会失败,与情况 3 相反。

关于java - 扩展 AnyVal 和 AnyRef 的对象的内存分配有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36589758/

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