假设我有以下代码,其中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#?
答案 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个引用类型变量,它保存对内存中相同地址的引用。