正如gurukulki所说,它存储在堆上。然而,你的帖子暗示了一个误解可能是由于一些善意的人传播的“原始人总是生活在堆栈”的神话。这是不真实的。局部变量在堆栈上有它们的值,但不是所有的原始变量都是局部变量…
例如,考虑这:
public class Foo
{
int value;
}
...
public void someOtherMethod()
{
Foo f = new Foo();
...
}
现在,f.value住在哪里?神话会建议它在堆栈 – 但实际上它是新的Foo对象的一部分,并生活在heap1。 (注意,f本身的值是一个参考,并且存在堆栈上。)
从那里,这是一个简单的步骤数组。你可以认为数组只是一个很多的变量 – 所以新的int [3]是有点像一个类的这种形式:
public class ArrayInt3
{
public readonly int length = 3;
public int value0;
public int value1;
public int value2;
}
1其实,这比这更复杂。堆栈/堆区别主要是一个实现细节 – 我相信一些JVM(可能是实验性的)可以告诉对象何时不会从方法中“转义”,并且可以在堆栈上分配整个对象。然而,它在概念上在堆上,如果你选择关心。