基元的 Java 数组是存储在堆栈中还是堆中?
2022-08-31 11:06:27
我有一个这样的数组声明:
int a[];
下面是一个基元类型的数组。此数组存储在哪里?它是存储在堆上还是堆栈上?这是一个原始类型,所有基元类型都不存储在堆上。a
int
int
我有一个这样的数组声明:
int a[];
下面是一个基元类型的数组。此数组存储在哪里?它是存储在堆上还是堆栈上?这是一个原始类型,所有基元类型都不存储在堆上。a
int
int
正如gurukulki所说,它存储在堆上。但是,您的帖子提出了一个误解,可能是由于一些善意的人传播了“原始人总是生活在堆栈上”的神话。这是不真实的。局部变量的值在堆栈上,但并非所有基元变量都是局部变量。
例如,请考虑以下情况:
public class Foo
{
int value;
}
...
public void someOtherMethod()
{
Foo f = new Foo();
...
}
现在,住在哪里?这个神话表明它在堆栈上 - 但实际上它是新对象的一部分,并且存在于堆1上。(请注意,其本身的值是一个引用,并且存在于堆栈上。f.value
Foo
f
从那里开始,这是一个简单的数组步骤。您可以将数组视为很多变量 - 所以有点像拥有这种形式的类:new int[3]
public class ArrayInt3
{
public readonly int length = 3;
public int value0;
public int value1;
public int value2;
}
1 事实上,它比这更复杂。堆栈/堆的区别主要是实现细节 - 我相信一些JVM,可能是实验性的JVM,可以判断对象何时永远不会从方法中“转义”,并且可以在堆栈上分配整个对象。但是,从概念上讲,如果您选择关心,它就在堆上。
它将存储在堆中
因为数组是java中的一个对象。
编辑:如果你有
int [] testScores;
testScores = new int[4];
将此代码视为对编译器说:“创建一个将包含四个整数的数组对象,并将其分配给名为 的引用变量。另外,继续并将每个元素设置为零。谢谢。testScores
int