黑马程序员技术交流社区

标题: int a在内存开辟空间了吗, [打印本页]

作者: 练习题    时间: 2014-8-16 15:06
标题: int a在内存开辟空间了吗,
int a在内存开辟空间了吗, 包括引用类型 如: Person p 光声明,没有指向,有没有在栈内存当中开辟空间呢
作者: lfs454766767    时间: 2014-8-16 15:16
开辟空间了,如果是引用类型,当new对象时在堆内存开辟空间,然后占内存的引用变量指向此空间。
作者: 练习题    时间: 2014-8-16 15:53
lfs454766767 发表于 2014-8-16 15:16
开辟空间了,如果是引用类型,当new对象时在堆内存开辟空间,然后占内存的引用变量指向此空间。 ...

int a; 没有存值,就单单在栈当中开辟了空间是吧,引用类型也一样吧?
作者: cs8630323    时间: 2014-8-16 15:58
本帖最后由 cs8630323 于 2014-8-16 16:26 编辑

局部变量未指定值只有引用,引用在栈,成员变量有默认值
作者: 高远    时间: 2014-8-16 16:24
开辟空间了。
作者: 木易在他乡    时间: 2014-8-16 16:39
哥们呢不是学计算机的,但是听毕老师视频有啊,声明变量就在栈内存,new后就在对内存,然后通过地址指向
作者: lfs454766767    时间: 2014-8-18 14:55
练习题 发表于 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
都没有开辟内存空间
作者: 怀念黑海岸    时间: 2014-8-18 18:44
你记好这句话:java中只有通过new才会产生实体对象。你前面的int [] a, Person p都只是生成了一个引用变量而已,他们存在于该变量所在的方法区的栈空间内,所以,其实你这两个申明都并未在内存中开辟空间。。。
作者: 单线程xia    时间: 2014-8-18 19:18
在栈内存中开辟了,a = 0
作者: 怀念黑海岸    时间: 2014-8-18 20:08
怀念黑海岸 发表于 2014-8-18 18:44
你记好这句话:java中只有通过new才会产生实体对象。你前面的int [] a, Person p都只是生成了一个引用变量 ...

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

基本数据类型只要声明就有空间,但其他的类的话,光是声明是没有空间的,只有用new关键字调用 构造函数才有空间




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2