2016-12-28 7 views
1

私はプリミティブ型の不変性についてブログを読んだことがあります。彼らは整数が不変であると言います。これは、整数変数が新しい値の割り当てごとに新しいメモリ位置を取得することを意味しますか?不変の整数

I.e.

int32 Val= 34; 
Val =38; 

今両方の値は、異なるメモリ位置に格納されるか、または同じであるのだろうか?

+2

ここでは4つのかなり別々の質問をしました.2,3,4は不変性とは関係ありません。彼らは、 'string'が参照型であり、' int'が値型であることと関係があります。それはあなたが単一*の非常に具体的な質問をするのに役立ちます。 (あなたの最初の質問はおそらくあなたのタイトルに最も近いでしょうが、あなたが何を求めているのかははっきりしていません)コードを表示することができれば、助けがはるかに簡単になります。 –

+0

これらの質問は、それらのためのガイダンスは役に立ちます..事前に感謝 – OmiH

+3

いいえ、私はこの質問に答えることはありません、それは広すぎるためです。スタックオーバーフローの質問は* specific *と* individual *でなければなりません。 1つの投稿に4つの幅広い質問をするのは良い考えではありません。 –

答えて

3

つまり、整数値は新しい値の割り当てごとに新しいメモリ位置を取得しますか?

整数は、「値型」であることを心に留めておいてください - 彼らは店にいうし、いくつかのメモリ位置への参照を格納していることを、その変数を意味します。あなたが行うときに:

int32 Val= 34; 
Val =38; 

新しいValに保存されている - ので、一つだけ「のメモリ位置」関与があり、その場所でが上書きされます。

ここで、両方の値が異なるメモリ位置に格納されるか同じですか?

まあ、その意味で34の「値」はもうどこにもに格納されていません。これで数字3434が使用されているところならどこでも38になりますか?決して!あなたがしたのは、異なるの値をValに格納していただけです。

トップに「Val」と書かれた紙のスクラップがあるとします(名前を付ける)。次に、 "34"と書いてください。あなたにはいくつの価値がありますか?紙の小片はいくつありますか?

ここでは、「34」を切り抜いて(「白抜き」)、「38」と書いています。 今度はいくつ持っていますか?紙の小片はいくつありますか?類推は、同様に動作することができるが、紙の「値」は、紙の異なるスクラップへ参照ある参照タイプで

。紙の値を変更すると、他のスクラップは魔法のように消えません。清掃作業員(ガベージコレクター)は、紙のすべてのスクラップを見渡し、他の紙片がそれを参照しているかどうかを確認し、参照がない場合は取り除くことができます。