2015-06-12 39 views
2

如果有任何性能差异(特别是内存使用情况)我只是想知道,当我做了以下....NET - 添加引用变量的ArrayList VS增加新的对象()来ArrayList的

而不是做的:

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())在每次循环,然后有没有内存被分配给引用的变量?

+0

这是Java还是C#,答案可能非常依赖于这个事实,它的一个实例是什么对象是关于您是否制作100个不同的引用或相同一个 – Sayse

+0

Java和C#有什么区别? – langjacques

+0

我认为你必须学习更多关于'新'的关键字。 –

回答

10

第一个在阵列的所有100个插槽中存储相同的对象引用。

第二个版本创建100个不同的对象,并将它们(对这些对象的引用)存储在数组中。

第一个:1个对象,100个引用
第二个:100个对象,100个引用?

这绝对不是一回事。

+0

好的,明白了,谢谢兄弟! – langjacques

0

在第二种方法中,在每次迭代中,您将实例化一个新对象,该对象在内存中也需要它自己的空间。在第一种方法中,你总是在内存中引用相同的对象。

所以关于内存分配有很大的区别。这与Java相关,add方法以小写字母开头。当然,你应该参数化通用类型ArrayList

+0

不是真的不行,第一种方法实际上是用新的引用创建新的对象,上面提到了唯一的顺从。 –

+0

你的意思是“不是真的,不是”?关于内存分配的 –

+0

它是完全一样的,这两种方法对内存有相同的效果,都创建了新的对象。 –

0

扩展到Gosu的答案,使用第一种方法将对象添加到数组将不会有任何实际用途,因为如果您更改数组中的任何对象的值,它将因为参考而被更改为所有100项类型。 是的,这对于Java和C都是一样的#