一:性能
问:那每次循环都会new一个A?那内存不是会满吗?仍是说要把这个初始化对象的动做放到循环外面的写法会比较好?编码
while(true) { A a = new A(); ... sleep(1000) }
答:对象状况下的结论spa
一、内存和性能
code
若是一个对象实例被声明在循环内部,那么每次执行循环体时都会为对象从新分配内存并初始化对象实例。初始化过程并不会占用过多的时间,可是内存分配会。在某种状况下,你可能没法跑到循环外部去建立对象实例。不过,若是可能的话,重置并重用对象应该是更好的选择。
二、可读性
正如我针对基本数据类型喜欢在循环外部进行变量声明同样,只要有可能,我就会在循环内部重置对象实例而不是从新建立一个。固然,若是被使用的对象实例很小,而且循环的次数很少的话,那么这个问题就不是那么突出了。不过,对这个问题仍是当心一点好
三、结论
如你所见,到底在循环内部或外部进行声明这个问题,对于对象而言是有差异的;而对于基本数据类型而言,则更多地是我的选择问题。个人我的观点是,若是可以在循环体中对对象实例进行重用,那么最好采用这种方案。从一致性角度讲,我相信将变量在循环体外部进行声明会更好。因此,若是你能对对象实例进行重用,那么你大可没必要改变你的编码习惯。
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();
这样写的效果是同样的,在循环里第一个循环就是一个新的做用域,上一个就会被覆盖掉,里面的对象也就天然不存在了,你能够直白点想,若是对象会覆盖那么循环也会覆盖,因此就不会冲突了。blog