.NET - 将引用的变量添加到数组列表与将新的对象()添加到数组列表
本文关键字:添加 数组 列表 对象 引用 NET 变量 | 更新日期: 2023-09-27 17:55:29
我只是想知道当我执行以下操作时是否有任何性能差异(特别是内存使用情况)......
而不是做:
ArrayList array = new ArrayList();
object obj = new object();
for(int x = 0; x < 100; x++)
{
array.Add(obj);
}
我这样做:
ArrayList array = new ArrayList();
for(int x = 0; x < 100; x++)
{
array.Add(new object());
}
还是一模一样?
据我了解,系统在内存中保存对 obj 变量的引用,一旦方法完成,变量就会被释放并释放内存
那么,如果我在每个循环中调用ArrayList.Add(new Object())
,那么没有内存分配给引用的变量?
第一个在
数组的所有 100 个插槽中存储相同的对象引用。
第二个版本创建 100 个不同的对象,并将它们(对这些对象的引用)存储在数组中。
第一个:1 个对象,100 个引用
第二个:100个对象,100个引用?
这绝对不是一回事。
在第二种方法中,在每次迭代中,您将实例化一个新对象,该对象也需要它在内存中自己的空间。在第一种方法中,您始终引用内存中的相同对象。
因此,在内存分配方面存在很大差异。这是关于Java的,add
方法以小写字母开头。当然,您应该参数化泛型类型ArrayList
。
扩展到 Gosu 答案,使用 fist 方法将对象添加到数组中将没有任何实际用途,因为如果您更改数组中任何对象的值,它将因引用类型而对所有 100 个项目进行更改。是的,Java和c#都是相同的