C#对象和内存管理

时间:2015-01-09 19:55:31

标签: c# object

假设我有以下代码,其中Car类只有1个属性:String modelname

Car c = new Car("toyota");
Car c1 = c;
Car c2 = c;
Car c3 = c;
Car c4 = c;
Car c5 = c;

这是每次都要制作汽车c的新副本吗?所以在记忆中会有一个新的“丰田”字符串5倍以上?或者“丰田”字符串只在内存中一次?

编辑:如果您遇到与我相同的问题,请添加此相关链接,我认为这会有所帮助Are arrays or lists passed by default by reference in c#?

3 个答案:

答案 0 :(得分:6)

不,"丰田" string只在内存中存在一次,因为只有一个Car对象,有6个引用指向它。

答案 1 :(得分:3)

Car是Reference类型,所以答案是否定的。请参阅:What is the difference between a reference type and value type in c#?

答案 2 :(得分:2)

分配引用类型只会将object引用(换句话说地址)复制到变量中。它不会复制实际的data,因为引用类型变量只保存参考值,换句话说,一个地址指示实际数据在内存中的位置。因此,在这种情况下,您将有6个引用类型变量,它保存对内存中相同地址的引用。