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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zoudeyong 中级黑马   /  2013-5-5 21:34  /  1979 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

栈和堆有啥区别?基本数据类型和引用数据类型在栈和堆中是怎样存储的?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

10 个回复

倒序浏览

顶楼上的
回复 使用道具 举报
2楼正解啊
回复 使用道具 举报
栈中主要是方法和局部变量,堆中主要是 对像和成员变量。
回复 使用道具 举报
栈中主要是方法和局部变量,堆中主要是 对像和成员变量。堆为栈提供地址值,所以栈可以指向堆
回复 使用道具 举报
栈内存中存储的都是方法,方法在栈中开辟空间储存各种引用的地址值;
堆内存中储存的都是实例(也就是new出来的东西),实例在堆中开辟空间存储实例的属性,

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 xuluheng718 于 2013-5-5 22:07 编辑

不多说,上图

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Java把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
堆内存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来治理。
回复 使用道具 举报
String s1 = "hello"; String s2 = "world"; String s3 = "hello"; 此时的s1=s3,String s1 = "hello"; 它是在栈中给s1分配一个变量hello,当s3再次分配的时候它会先去从栈中找看有没有hello变量,如果有就直接连接到那个地址,没有就新创建一个,所以此时s1和s3是指向同一个地址,内容相同,记住,他们是存放在栈中。 s1 = new String("hello"); s2 = new String("hello"); 此时s1 != s2,对与new来说,它是在内存中分配空间,new s1是它会给s1分配一个空间存放hello,当new s2时,它会给s2分配另一空间存放hello,它们的地址是不同的,所以不相等,而且还要注意的是 “=”比较的是引用,相等于地址吧,所以二者不等,但是你用equals时它们就是相等的,即s1.equals(s2)返回的是true,因为它比较的是对象值。记住,new是在内存中分配空间。看看这个,把String s1 = "hello"理解成int i= 1, s1 = new String("hello")理解成 i = new Integer(1);
回复 使用道具 举报
罗广伟 来自手机 中级黑马 2013-5-7 07:49:23
10#
尹桥印 发表于 2013-5-5 21:37:38
本帖最后由 尹桥印 于 2013-5-5 21:39 编辑

栈是用来装变量和引用类型的,装了变量以后,变量上是有值的,而引用类型本身在里面是没有值的,而是放在堆里面的
堆就是装new出来的东西

字符串是放在什么内存中的?来自: Android客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马