10
void someMethod() {
  byte[] array = { 0, 0 };
}

这个数组是存储在堆中还是堆栈中?

4

2 回答 2

18

你可以认为它总是在堆上。

我相信一些智能虚拟机如果能够检测到对象是安全的,就能够堆栈分配对象——但从概念上讲,它是在堆上的。特别是,所有数组类型都是引用类型(即使元素类型是原始类型),所以array变量(在堆栈上)只是对对象的引用,而对象通常在堆上。

特别是,想象一个小的变化:

byte[] someMethod() { 
    byte[] array = { 0, 0 };
    return array;
}

如果数组是在堆栈上分配的,那么返回的引用必须引用什么?

于 2010-08-13T07:46:59.533 回答
2

它将存储在堆中

于 2010-08-13T07:47:27.937 回答