Objects normally are created on the heap, but as Stephan already hinted, things have become a little more complicated since
escape analysis was added to the JVM.
The idea of escape analysis is to check if in a method objects are created that don't "escape" from the method - temporary objects, that are only used inside the method, and are eligible for garbage collection as soon as the method returns. It's a good idea to allocate these objects on the stack instead of on the heap, because then deallocating them will cost nothing - the stack is unwound when the method returns, cleaning up any objects allocated there. The garbage collector, which cleans up unused objects on the heap, doesn't have to deal with these temporary objects. It's a nice performance optimization, which was added in one of the Java 6 updates (I think Java 6 update 14, although it was not enabled by default in that version).
Note that this is definitely not a beginner's topic. You don't need to know these things, unless you want to be an expert in the inner workings of the JVM.
For the general idea, just remember that objects created with
new are always on the heap. The stack is only for storing local variables (references and primitive variables) inside a method, the return address etc. - see
call stack.