C#对象和内存管理

C# objects and memory managment

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

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

这是不是每次都要复制car c?那么内存中会多出一个新的 "toyota" 字符串 5 倍吗?或者 "toyota" 字符串只会在内存中出现一次?

编辑:添加这个相关的 link 以防你和我有同样的问题,我认为它有帮助 Are arrays or lists passed by default by reference in c#?

不,"toyota"字符串只会在内存中出现一次,因为只有一个 Car 对象,有 6 个引用指向它。

汽车是Reference type, so the answer is no. See: What is the difference between a reference type and value type in c#?.

分配引用类型只是将 objectreference(换句话说地址)复制到变量中。它不会复制实际的 data,因为引用类型变量仅包含引用值,或者换句话说,一个地址指示实际数据在内存中的位置。所以在这种情况下,你将有 6 个引用类型变量,它们保存对内存中相同地址的引用。