不可变整数

时间:2016-12-28 12:59:06

标签: c# c#-4.0

我已经阅读了博客,了解原始类型的不变性。他们说整数是不可变的。这是否意味着整数变量在每次赋值时获得新的内存位置?

即。

int32 Val= 34;
Val =38;

现在两个值都将存储在不同的内存位置或相同?

1 个答案:

答案 0 :(得分:3)

  

这是否意味着整数变量在每次赋值时获得新的内存位置?

请记住,整数是“值类型” - 意味着它们存储的变量存储而不是对某个内存位置的引用。所以当你这样做时:

int32 Val= 34;
Val =38;

新的存储在Val中 - 因此只涉及一个“内存位置”,并且该位置的将被覆盖。< / p>

  

现在两个值都将存储在不同的内存位置或相同?

那么,从这个意义上来说,34的“价值”不再存储在任何地方。这是否意味着34现在在使用38的任何地方34?绝不!您所做的就是在Val中存储不同的值。

想象一下,你有一张纸,上面写着“Val”(只是给它一个名字)。然后你写上“34”。你有多少价值?有多少纸屑?

现在你越过(或白化)“34”并写“38”。 现在你有多少价值观?有多少纸屑?

使用引用类型,类比也可以起作用,但纸上的“值”是引用到不同的纸张。如果更改纸张上的值,则其他废料不会神奇地消失。清洁人员(垃圾收集器)的工作是查看周围的所有纸屑,看看是否有任何其他纸张引用它,如果没有参考则扔掉它。