C# 在while循环中new的对象

来源:互联网 发布:iapp 免杀源码 编辑:程序博客网 时间:2024/06/06 08:25

一:

  问:那每次循环都会new一个A?那内存不是会满吗?还是说要把这个初始化对象的动作放到循环外面的写法会比较好?

1
2
3
4
5
6
while(true)
{
A a = new A();
...
sleep(1000)
}

  答:对象情况下的结论

  1、内存和性能

    如果一个对象实例被声明在循环内部,那么每次执行循环体时都会为对象重新分配内存并初始化对象实例。初始化过程并不会占用过多的时间,但是内存分配会。在某种情况下,你可能无法跑到循环外部去创建对象实例。不过,如果可能的话,重置并重用对象应该是更好的选择。
 
  2、可读性
    正如我针对基本数据类型喜欢在循环外部进行变量声明一样,只要有可能,我就会在循环内部重置对象实例而不是重新创建一个。当然,如果被使用的对象实例很小,并且循环的次数不多的话,那么这个问题就不是那么突出了。不过,对这个问题还是小心一点好
 
  3、结论
    如你所见,到底在循环内部或外部进行声明这个问题,对于对象而言是有差别的;而对于基本数据类型而言,则更多地是个人选择问题。我的个人观点是,如果能够在循环体中对对象实例进行重用,那么最好采用这种方案。从一致性角度讲,我相信将变量在循环体外部进行声明会更好。所以,如果你能对对象实例进行重用,那么你大可不必改变你的编码习惯。
 
 
二:
 
  问:不明白为什么可以重复实例同一个对象?我声明一个类,在For循环里重复实例十个对象,而且对象名都是一样。为什么不会报错哦,明胆十个对象名都一样的。
  
1
2
3
4
5
6
7
8
9
10
for (int i = 0; i < 10; i++)
{
    Person p1 = new Person();
    p1.Name = "桂洪";
    Console.WriteLine(p1.Name);
  
  
    
}
Console.ReadKey();

  答:对象是有作用域的,到你下一次再进来时上一次的对象就不存在了。对象在进入作用域时产生,在超出做用域后会回收掉
所以不会重复

复制代码
Person p1 = new Person();for (int i = 0; i < 10; i++){     p1.Name = "桂洪";    Console.WriteLine(p1.Name);}Console.ReadKey();
复制代码

这样写的效果是一样的,在循环里第一个循环就是一个新的作用域,上一个就会被覆盖掉,里面的对象也就自然不存在了,你可以直白点想,如果对象会覆盖那么循环也会覆盖,所以就不会冲突了。

转自:https://www.cnblogs.com/testsec/p/6624223.html

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝脑瘫 四个月宝宝辅食 照顾小宝宝 五个月宝宝辅食 宝宝早教 宝宝装 宝宝成长 宝宝照片 想要宝宝 两岁半宝宝食谱 幼儿园照顾小宝宝 宝宝说话 可爱宝宝照片 宝宝脑瘫怎么办 两岁宝宝食谱 宝宝辅食添加 宝宝身高 宝宝食谱大全 一岁半宝宝食谱 宝宝毛衣 两岁宝宝的教育 五个月宝宝早教 宝宝健康食谱 两岁宝宝早教 九个月宝宝辅食 宝宝上火怎么办 妈妈宝宝 宝宝胎记 宝宝健康 宝宝面 宝宝发热怎么办 宝宝爱整理 十个月的宝宝食谱 照顾宝宝 1岁半宝宝食谱 宝宝的辅食 宝宝感冒发烧 宝宝生日派对 宝宝七个月辅食 加州宝宝 水宝宝防晒