C# 不可变整数

C# 不可变整数,c#,c#-4.0,C#,C# 4.0,我在博客上读过关于原语类型不变性的文章。他们说整数是不可变的。这是否意味着整数变量在每次赋值时都会得到新的内存位置 即 现在这两个值将存储在不同的内存位置,还是相同的内存位置 这是否意味着整数变量在每次赋值时都会得到新的内存位置 请记住,整数是“值类型”——这意味着它们存储在其中的变量存储值,而不是对某个内存位置的引用。所以当你这样做的时候: int32 Val= 34; Val =38; 一个新值存储在Val-因此只涉及一个“内存位置”,并且该位置的值被覆盖 现在这两个值将存储在不同的内存位

我在博客上读过关于原语类型不变性的文章。他们说整数是不可变的。这是否意味着整数变量在每次赋值时都会得到新的内存位置

现在这两个值将存储在不同的内存位置,还是相同的内存位置

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

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

int32 Val= 34;
Val =38;
一个新值存储在
Val
-因此只涉及一个“内存位置”,并且该位置的值被覆盖

现在这两个值将存储在不同的内存位置,还是相同的内存位置

嗯,从这个意义上说,
34的“值”不再存储在任何地方。这是否意味着编号
34
现在位于使用
34
的任何位置?绝对不是!您所做的只是在
Val
中存储一个不同的值

假设你有一张纸,上面写着“Val”(只是为了给它起个名字)。然后在上面写上“34”。你有多少价值观?有多少张纸片

现在你把“34”划掉(或用白色划掉),写上“38”。现在你有多少个值?有多少张纸片


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

你在这里问了四个相当独立的问题——2、3和4与不变性无关。它们与
string
作为引用类型和
int
作为值类型有关。如果你能问一个非常具体的问题,这会有帮助。(你的第一个问题可能与你的标题最接近,但你的问题并不十分清楚。如果你能展示一些代码,这将更容易帮助你。)这些问题在阅读了不同的文章后被打断了。对他们的任何指导都会有帮助。。谢谢你,我不会回答这个问题,因为它太宽泛了。堆栈溢出问题应该是具体的和个别的。在一篇文章中提出四个广泛的问题不是一个好主意。只是一个提示:不要与Jon Skeet顶嘴,你会失去^^^你把变量和值混淆了。整数变量是可变的,但值不是可变的。不能说“我在此声明12号现在是87号”;您只能说“我在此声明变量x现在的值为87”。确保你理解其中的区别。
int32 Val= 34;
Val =38;