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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王海舟 于 2012-9-14 09:04 编辑

int i=3;
class Person
{
      .........
}


while(i>0)
{
      Person p=new Person();
      i--;
}


每次循环的时候:
在托管堆中会创建一个新的对象么?在栈中会创建一个新的指针变量p来存储对象的地址么?
又或者只在托管堆中创建了一个对象?还是只在栈中创建了一次指针变量p?


5 个回复

倒序浏览
Person p=new Person();//当i=3时,创建一个p人对象,当i=2时,再创建一个p人对象,当i=1时,又创建了一个p对象,个人认为这三个对象是不一样的

回复 使用道具 举报
许庭洲 发表于 2012-9-14 10:26
Person p=new Person();//当i=3时,创建一个p人对象,当i=2时,再创建一个p人对象,当i=1时,又创建了一个 ...

如果说在托管堆中创建了3个不一样的对象:
那在栈中是只有一个指针变量,每次指向不同的对象呢?
还是3次创建了3个不同的指针变量呢?
回复 使用道具 举报
三个person对象和三个引用(你所说的指针变量)都是相互独立的(在内存中有自己的存储空间),存储在栈中的p会在每次循环结束后被释放
回复 使用道具 举报
while 循环会执行三次,因此会在托管堆中创建3个Person对象,还会在栈中创建3个引用p,同时,每次循环完后引用p会释放
回复 使用道具 举报
多谢大家的回答,我自己总结一下:
每一次循环:
会在栈中开辟一块内存空间,它的名字为p,它里面存储的值就是一个Person类型对象的地址。
会在托管堆中开辟一块内存空间,用来存储Person类型的对象。
在循环结束的时候,栈中的内存空间会被释放。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马