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#?.
分配引用类型只是将 object
的 reference(换句话说地址)复制到变量中。它不会复制实际的 data
,因为引用类型变量仅包含引用值,或者换句话说,一个地址指示实际数据在内存中的位置。所以在这种情况下,你将有 6 个引用类型变量,它们保存对内存中相同地址的引用。
假设我有以下代码,其中 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#?.
分配引用类型只是将 object
的 reference(换句话说地址)复制到变量中。它不会复制实际的 data
,因为引用类型变量仅包含引用值,或者换句话说,一个地址指示实际数据在内存中的位置。所以在这种情况下,你将有 6 个引用类型变量,它们保存对内存中相同地址的引用。