C# 对象和内存管理

本文关键字:管理 内存 对象 | 更新日期: 2023-09-27 18:36:54

假设我有以下代码,其中 Car 类只有 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 副本?所以内存中会有5倍以上的新"丰田"字符串?还是"丰田"字符串只会在内存中出现一次?

编辑:添加此相关链接,以防您遇到与我相同的问题,我认为这会有所帮助 数组或列表是否默认在 c# 中通过引用传递?

C# 对象和内存管理

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

Car 是引用类型,所以答案是否定的。请参见: c# 中的引用类型和值类型有什么区别?。

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