这篇帖子误导性太多, 会让很多新人进入误区!1. 栈何来特殊性为数据可以共享!java里确实存在栈,而且还包括很多栈! 方法也可以视为一个栈,栈的后进先出特性希望理解, 2. String a ="abc"; 说是存在于栈中, 荒谬! 用String是final的特性 来打着幌子骗人,  你可曾想过,它可以调用方法?3. 中间有个帖子提问的好,t = new Test(){int i}; t在堆中, t.i却在栈中, 怎样让人理解呢?。 
||后面是个人理解: 一个方法就是一个栈, 满足着后进先出的道理, 堆是栈的一个元素, 不管是类还是方法 还是或者什么 一个“{”, 代表着入栈,“}”代表着出栈, 一旦出了括号, 括号里所声明的任何变量, 都会瞬间全部弹出(当然也遵守着后进先出),这是java栈!这个时候, 你可以想到何为栈,何为堆了,main()方法执行, 一个是操作栈, 一个是存放数据的栈,(猜想)
 总之整个流程都存在在这个栈中, 在栈中new出的对象分配在堆中! 而这个对象的{}也就是它的类, 中又是一个栈, 它也存在在这个大的栈中, 当然jvm的底层有着常量池和方法区来存放那些相应的字节码, 对象一旦调用属性或方法, 也就是将那些东西进行入栈出栈的操作,上述是个人理解观点, 靠猜测而来, 没有去深读JVM, 但是栈的原理就是这样! 这点是不会错的