我有一个这样的数组声明:
int a[];
这里 a
是原始数组 int
类型。这个数组存储在哪里?它存储在堆上还是堆栈上?这是一个原始类型 int
,所有原始类型都不存储在堆上。
原文由 user241924 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个这样的数组声明:
int a[];
这里 a
是原始数组 int
类型。这个数组存储在哪里?它存储在堆上还是堆栈上?这是一个原始类型 int
,所有原始类型都不存储在堆上。
原文由 user241924 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
正如 gurukulki 所说,它存储在堆上。但是,您的帖子暗示了一种误解,可能是由于某些善意的人传播了“基元总是存在于堆栈中”的神话。这是不真实的。 局部变量 在堆栈上有它们的值,但并非所有原始变量都是局部的……
例如,考虑一下:
现在,
f.value
住在哪里?神话暗示它在堆栈上——但实际上它是新的Foo
对象的一部分,并且存在于堆1上。 (注意f
的值本身是一个引用,并且存在于堆栈中。)从那里开始,这是一个简单的数组步骤。您可以将数组视为很多变量 - 所以
new int[3]
有点像具有这种形式的类:1事实上,它比这更复杂。堆栈/堆的区别主要是一个实现细节——我相信一些 JVM,可能是实验性的,可以判断一个对象何时永远不会从方法中“逃脱”,并且可以在堆栈上分配整个对象。但是,如果您选择关心的话,它在 概念 上是堆上的。