2016-12-28 43 views
1

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

I.e.

int32 Val= 34; 
Val =38; 

现在,这两个值将被存储在不同的存储位置或相同?

+2

你已经在这里问了四个相当单独的问题 - 而2,3和4与不变性无关。它们与'string'是一个引用类型有关,'int'是一个值类型。如果你问一个非常具体的问题,这将有所帮助。 (你的第一个问题可能与你的标题最接近,但是你不清楚你在问什么,如果你能显示一些代码,那么帮助你会容易得多。) –

+0

这些问题在阅读不同的文章后被打乱了。对他们的任何指导将有所帮助..在此先感谢 – OmiH

+3

不,我不会回答这个问题,因为它太广泛。堆栈溢出问题应该*特定*和*个人*。在单个帖子中提出四个广泛的问题并不是一个好主意。 –

回答

3

这是否意味着整型变量的新值的每一项任务得到新的存储位置?

记住整数是“值类型” - 这意味着一个变量,它们存储在存储而不是一些内存位置的参考。所以,当你这样做:

int32 Val= 34; 
Val =38; 

存储在Val - 所以只有一个“记忆区”参与,并在该位置的被覆盖。

现在,这两个值将被存储在不同的存储位置或相同?

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

假设你有一张废纸上,你已经写了“瓦尔”在顶部(只是为了给它一个名字)。然后你写上“34”。你有多少价值?有多少纸屑?

现在你划掉(或白出)的“34”并写入“38”。 现在你有多少价值?有多少纸屑?

随着引用类型类比可以工作为好,但在纸张上的“值”是一个参考到不同的废料的纸张。如果您更改纸张上的值,则其他废料不会神奇消失。清洁团队(垃圾收集者)的工作是查看躺在附近的所有纸屑,看看是否有其他废纸正在引用它,如果没有引用,则将其扔掉。