黑马程序员技术交流社区
标题:
这段代码共创建了几个对象?几个变量?
[打印本页]
作者:
王海舟
时间:
2012-9-14 09:03
标题:
这段代码共创建了几个对象?几个变量?
本帖最后由 王海舟 于 2012-9-14 09:04 编辑
int i=3;
class Person
{
.........
}
while(i>0)
{
Person p=new Person();
i--;
}
每次循环的时候:
在托管堆中会创建一个新的对象么?在栈中会创建一个新的指针变量p来存储对象的地址么?
又或者只在托管堆中创建了一个对象?还是只在栈中创建了一次指针变量p?
作者:
许庭洲
时间:
2012-9-14 10:26
Person p=new Person();//当i=3时,创建一个p人对象,当i=2时,再创建一个p人对象,当i=1时,又创建了一个p对象,个人认为这三个对象是不一样的
作者:
王海舟
时间:
2012-9-14 11:49
许庭洲 发表于 2012-9-14 10:26
Person p=new Person();//当i=3时,创建一个p人对象,当i=2时,再创建一个p人对象,当i=1时,又创建了一个 ...
如果说在托管堆中创建了3个不一样的对象:
那在栈中是只有一个指针变量,每次指向不同的对象呢?
还是3次创建了3个不同的指针变量呢?
作者:
iamheima
时间:
2012-9-14 12:24
三个person对象和三个引用(你所说的指针变量)都是相互独立的(在内存中有自己的存储空间),存储在栈中的p会在每次循环结束后被释放
作者:
陈育梅
时间:
2012-9-14 13:47
while 循环会执行三次,因此会在托管堆中创建3个Person对象,还会在栈中创建3个引用p,同时,每次循环完后引用p会释放
作者:
王海舟
时间:
2012-9-14 18:08
多谢大家的回答,我自己总结一下:
每一次循环:
会在栈中开辟一块内存空间,它的名字为p,它里面存储的值就是一个
Person类型对象的地址。
会在托管堆中开辟一块内存空间,用来存储
Person类型的对象。
在循环结束的时候,栈中的内存空间会被释放。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2