A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

堆和栈,特别难理解,很烦啊

15 个回复

倒序浏览
本帖最后由 215041631 于 2014-6-15 20:47 编辑

刚开始学习别往太深了想,先把它理解,后面再深究。
数据类型有两种,你可以简单的理解为栈内存是存放基本类型数据和引用变量的,而对象会存放在堆内存里。
如 int a = 3 ;  变量a和3都存在栈内存中。
而 String s = "abc" ,这句话会在堆内存中会新建一个String对象 并存放这个abc。s 这个引用变量会存在栈内存中并且指向对内存中的对象的地址。

我也刚开始学,不知道说的有没有不对或者不懂的。后面一起讨论嘛。:handshake

回复 使用道具 举报
同求解答。。
回复 使用道具 举报
不知道楼主指的是数据结构的堆和栈还是操作系统中的堆和栈。
我这里还是浅浅地解释一下数据结构的吧~
记住的要点:①堆,列队优先,先进后出 。②栈,后进先出(Last-In/First-Out)。
要点①理解技巧:
理解成这个是一个盘子叠起来的,为了方便和安全,肯定是从最上面的开始拿,所以就导致了先叠上去的是后面拿出来的,不能中间抽取。
要点②理解技巧:可以理解成你在吃可比克薯片,按照常规,你应该是先吃后面的。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
详见百度百科:http://baike.baidu.com/link?url=lxi-i9RpsN_GBZnSn-zfA8bS1K9KykeUjlEhq1kLpvvIfWf4aL0loXl9OPOD9rLs
求版主给技术分!早日进黑马!
回复 使用道具 举报
堆数据只有在程序运行结束才会销毁,栈你可以理解为客栈,把人理解为函数,生命周期就是登记-》退房这段时间,退房后就自动销毁。
回复 使用道具 举报
215041631 发表于 2014-6-15 20:31
刚开始学习别往太深了想,先把它理解,后面再深究。
数据类型有两种,你可以简单的理解为栈内存是存放基本 ...

"abc"字符串是放在方法中的常量池中,在String和StringBuffer会学到,这里的s没有指向堆,指向的是常量池
回复 使用道具 举报
junly 发表于 2014-6-15 20:52
不知道楼主指的是数据结构的堆和栈还是操作系统中的堆和栈。
我这里还是浅浅地解释一下数据结构的吧~
记住 ...

非常感谢 ,  但是技术分真的给不了  兄弟  你看我的技术分才多少     痛苦啊
回复 使用道具 举报
Alan_Kwan 发表于 2014-6-15 21:16
堆数据只有在程序运行结束才会销毁,栈你可以理解为客栈,把人理解为函数,生命周期就是登记-》退房这段时 ...

栈中存的是地址,堆中存的是内容?
回复 使用道具 举报
华子 中级黑马 2014-6-15 23:03:14
9#
堆存储的东东要靠垃圾回收机制处理才会消失,栈存储的东东是自动释放的,是一个零时变量。
回复 使用道具 举报
基本数据类型在栈中,对象在堆中
回复 使用道具 举报
堆放内存,栈放变量
回复 使用道具 举报
wssjdysf 发表于 2014-6-16 00:13
堆放内存,栈放变量

堆不是在内存里吗 、?  怎么存放内存?
回复 使用道具 举报
华子 发表于 2014-6-15 23:03
堆存储的东东要靠垃圾回收机制处理才会消失,栈存储的东东是自动释放的,是一个零时变量。 ...

哦  原来是这样啊
回复 使用道具 举报
这个堆和栈确实很费静啊
回复 使用道具 举报
打错了,把对象打成内存了,堆里面放的是对象,栈放的是变量
回复 使用道具 举报
多理解理解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马