数组局部变量的哪一部分存储在堆栈中?哪一部分在堆上?

时间:2014-09-24 15:50:06

标签: java arrays stack heap

假设我们有以下代码:

void method() {
    int[] test = new int[3];
    test[0] = 0;
    test[1] = 1;
    test[2] = 2;
}

根据我从Jon Skeet's post on SO读到的内容,new int[3]部分相当于:

public class ArrayInt3 {
    public readonly int length = 3;
    public int value0;
    public int value1;
    public int value2;
}

这是否意味着test(对ArrayInt3的引用)在堆栈上?这是否意味着ArrayInt3在堆上?我想value0value1value2也在堆上(在本例中为0,1,2)?

总的来说,堆上有4个对象,对吗?

1 个答案:

答案 0 :(得分:1)

堆栈上没有对象。在堆栈上,将存储堆中存储的单个int[]对象的参考值。

您必须开始区分对象,变量和值。

局部变量是方法堆栈的一部分,它位于堆栈上。因此int[]的参考值将存储在堆栈中的变量中。