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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 练习题 中级黑马   /  2014-8-16 15:06  /  2549 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int a在内存开辟空间了吗, 包括引用类型 如: Person p 光声明,没有指向,有没有在栈内存当中开辟空间呢

12 个回复

倒序浏览
开辟空间了,如果是引用类型,当new对象时在堆内存开辟空间,然后占内存的引用变量指向此空间。
回复 使用道具 举报
lfs454766767 发表于 2014-8-16 15:16
开辟空间了,如果是引用类型,当new对象时在堆内存开辟空间,然后占内存的引用变量指向此空间。 ...

int a; 没有存值,就单单在栈当中开辟了空间是吧,引用类型也一样吧?
回复 使用道具 举报
本帖最后由 cs8630323 于 2014-8-16 16:26 编辑

局部变量未指定值只有引用,引用在栈,成员变量有默认值
回复 使用道具 举报
开辟空间了。
回复 使用道具 举报
哥们呢不是学计算机的,但是听毕老师视频有啊,声明变量就在栈内存,new后就在对内存,然后通过地址指向
回复 使用道具 举报
练习题 发表于 2014-8-16 15:53
int a; 没有存值,就单单在栈当中开辟了空间是吧,引用类型也一样吧?

假如int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b这个引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。整个过程都是在栈内存中进行的,而引用类型不同,声明是在栈中,而创建对象时会在堆内存中开辟空间,然后将栈内存中的变量指向堆内存中的这块空间。
回复 使用道具 举报
danmo 中级黑马 2014-8-18 14:57:31
8#
都没有开辟内存空间
回复 使用道具 举报
你记好这句话:java中只有通过new才会产生实体对象。你前面的int [] a, Person p都只是生成了一个引用变量而已,他们存在于该变量所在的方法区的栈空间内,所以,其实你这两个申明都并未在内存中开辟空间。。。

点评

栈空间就不是内存空间了吗?  发表于 2014-8-18 20:01
回复 使用道具 举报
在栈内存中开辟了,a = 0
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-18 18:44
你记好这句话:java中只有通过new才会产生实体对象。你前面的int [] a, Person p都只是生成了一个引用变量 ...

这个栈空间是为这些变量所在的方法而开辟的,可不是为这些变量开辟的,意思就是不管你这些变量有或者无,这个栈空间都是存在的。
回复 使用道具 举报
练习题 发表于 2014-8-16 15:53
int a; 没有存值,就单单在栈当中开辟了空间是吧,引用类型也一样吧?

基本数据类型只要声明就有空间,但其他的类的话,光是声明是没有空间的,只有用new关键字调用 构造函数才有空间
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马