本地定义的基元将在堆栈中。但是,如果将原语定义为对象实例的一部分,则该原语将位于堆上。
public class Test { private static class HeapClass { public int y; // When an instance of HeapClass is allocated, this will be on the heap. } public static void main(String[] args) { int x=1; // This is on the stack. }}关于更新:
对象没有自己的堆栈。在我的示例中,
int y实际上是的每个实例的一部分
HeapClass。只要分配了HeapClass的实例(例如
newTest.HeapClass()),就会将HeapClass的所有成员变量添加到堆中。因此,由于的实例
HeapClass是在堆上分配的,因此
inty将作为实例的一部分在堆上
HeapClass。
但是,在任何方法的主体中声明的所有原始变量都将 位于stack上 。
如您在上面的示例中所见,
int x它在堆栈中,因为它是在方法主体中声明的-而不是作为类的成员声明的。



