一:

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

while(true)
{
A a = new A();
...
sleep(1000)
}

  答:对象情况下的结论

  1、内存和性能

    如果一个对象实例被声明在循环内部,那么每次执行循环体时都会为对象重新分配内存并初始化对象实例。初始化过程并不会占用过多的时间,但是内存分配会。在某种情况下,你可能无法跑到循环外部去创建对象实例。不过,如果可能的话,重置并重用对象应该是更好的选择。
 
  2、可读性

    正如我针对基本数据类型喜欢在循环外部进行变量声明一样,只要有可能,我就会在循环内部重置对象实例而不是重新创建一个。当然,如果被使用的对象实例很小,并且循环的次数不多的话,那么这个问题就不是那么突出了。不过,对这个问题还是小心一点好
 
  3、结论

    如你所见,到底在循环内部或外部进行声明这个问题,对于对象而言是有差别的;而对于基本数据类型而言,则更多地是个人选择问题。我的个人观点是,如果能够在循环体中对对象实例进行重用,那么最好采用这种方案。从一致性角度讲,我相信将变量在循环体外部进行声明会更好。所以,如果你能对对象实例进行重用,那么你大可不必改变你的编码习惯。
 
 
二:
 
  问:不明白为什么可以重复实例同一个对象?我声明一个类,在For循环里重复实例十个对象,而且对象名都是一样。为什么不会报错哦,明胆十个对象名都一样的。
  

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 = ; i < ; i++)
{ p1.Name = "桂洪";
Console.WriteLine(p1.Name);
}
Console.ReadKey();

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

 
 

C# 在while循环中new的对象的更多相关文章

  1. vue 如何在循环中 "监听" 的绑定v-model数据

    vue 如何在循环中 "监听" 的绑定v-model数据 阅读目录 vue 如何在循环中 "监听" 的绑定v-model数据 1. 普通属性的值进行监听 2. ...

  2. for循环中i--的妙用 及 两变量互换数值的问题

    int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * ...

  3. Python 之 for循环中的lambda

    第一种 f = [lambda x: x*i for i in range(4)]  (如果将x换成i,调用时候就不用传参数,结果都为3) 对于上面的表达式,调用结果: >>> f ...

  4. 在jquery中each循环中,要用return false代替break,return true代替continue。

    在jquery中each循环中,要用return false代替break,return true代替continue. $.each(data, function (n, value) { if(v ...

  5. JavaScript形而上的For循环中的Break

    break相当于循环中的GOTO,需避免使用. 下面是一个break使用例子. 找出第一个months小于7的项目. const cats = [ { name: 'Mojo', months: 84 ...

  6. Java循环中try...finally...遇到continue

    一段很简单的代码,先自己在大脑中给出结果: for (int i = 0; i < 5; i++) { System.out.println("enter: i=" + i) ...

  7. 浅谈循环中setTimeout执行顺序问题

    浅谈循环中setTimeout执行顺序问题 (下面有见解一二) 期望:开始输出一个0,然后每隔一秒依次输出1,2,3,4. for (var i = 0; i < 5; i++) { setTi ...

  8. django for 循环中,获取序号

    模板的for循环中,如何获取序号? 想过用enumerate,但是在模板中会报错 Could not parse the remainder xxx: 后来搜到 forloop.counter,完美解 ...

  9. JS如何获取PHP循环中的ID

    JS如何获取PHP循环中的ID  kaalrz 二路公交车    结帖率:83.33%   首先抱歉,因为昨天那帖图片几次都不能用,修改到不能再次修改,今天早上回帖又提示没有这个帖,只好重发一次. 如 ...

随机推荐

  1. BKDR Hash 函数实现

    K&R一书中提出的BKDR Hash算法,这里给出C函数实现,实际用的时候分布比较好而且实现简单.唯一不明白的就是为什么选择131这种模式的数字作为种子,隐隐有沃尔夫勒姆31号自动机的似曾相识 ...

  2. ES6 原始类型 Symbol

    1. 创建Symbol (没有字面格式) Symbol是原始值,没有构造函数 Symbol接受一个可选参数,可以让你添加一段文本描述即将创建的Symbol,这段描述不可用于属性访问,以便于代码阅读和调 ...

  3. Java基础知识--内存管理

    Java语言中 的垃圾收集器相对于以前的其他语言优势是什么? 过去的语言需要程序员显示的进行分配内存.释放内存.这种做法可能会引起“内存泄漏”,即由于某种原因是分配给程序的内存无法释放,如果该任务不断 ...

  4. ARM 技术文档

    1. 相关链接 ARM官网: http://infocenter.arm.com/ 比较有用的几个目录: ARM Technical Support Knowledge Articles  一些关于A ...

  5. 使用Qemu运行Ubuntu文件系统(1)

    参考 https://blog.csdn.net/mountzf/article/details/51707853 https://blog.csdn.net/stephen_lu_fahai/art ...

  6. Error opening terminal: xterm-256color

    在使用gdb调试linux内核时,提示如下错误: arm-none-linux-gnueabi-gdb --tui vmlinux Error opening terminal: xterm-256c ...

  7. Unity3d XmlException: Text node cannot appear in this state的方案

    这个问题是utf-8编码的问题,如果是utf-8+bom那么就会出现这种问题,如果是单纯的utf-8就没有这种问题(当然如果你把他完全变成ansi,那也行) 我在读写xml的时候遇到这个问题.查了好久 ...

  8. .Net转Java.01.从Main(main)函数说起

    在C#中,main函数的签名可以有四种 static void Main(string[] args)static void Main()static int Main(string[] args)s ...

  9. [Docker] Running Multiple Containers for an Angular, Node project

    The code is from Plusight course, github link is here. In this post, we will give a overview about h ...

  10. 用分离、附加的方式实现sql server数据库的备份和还原

    一.数据库分离.附加的说明 SQL Server提供了"分离/附加"数据库."备份/还原"数据库.复制数据库等多种数据库的备份和恢复方法.这里介绍一种学习中常用 ...