Do Java primitives go on the Stack or the Heap?

heap-memory, java, stack-memory

Solution

Primitives defined locally would be on the stack. However if a primitive were defined as part of an instance of an object, that primitive would be on the heap.

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.
    }
}

With regards to the update:

Objects do not have their own stack. In my example, `int y` would actually be part of each instance of `HeapClass`. Whenever an instance of HeapClass is allocated (e.g. `new Test.HeapClass()`), all member variables of HeapClass are added to the heap. Thus, since instances of `HeapClass` are being allocated on the heap, `int y` would be on the heap as part of an instance of `HeapClass`.

However, all primitive variables declared in the body of any method would be on the stack.

As you can see in the above example, `int x` is on the stack because it is declared in a method body--not as a member of a class.

Problem

I just know that the non-primitives (the objects) go on the heap, and methods go on the stack, but what about the primitive variables? --update Based on the answers, I could say the heap can have a new stack and heap for a given object? Given that the object will have primitive and reference variables..?

Original source