初始化的java数组是进入堆栈还是堆?

时间:2010-08-13 07:42:02

标签: java arrays stack heap

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

此数组是存储在堆中还是存储在堆栈中?

2 个答案:

答案 0 :(得分:18)

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

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

特别想象一下小小的变化:

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

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

答案 1 :(得分:2)

它将存储在堆