序文
何事もなくアイドルの最後の夜は、少し周りの最後のCSDNに、突然、私が見つかりました。ポストがポイントにに見て、非常に興味深いです。
非常に洞察に満ちた質問
= 1 INT、
オブジェクトB = A;
オブジェクトC = B;
C = 2、
なぜB 2になりますか?B、Cは参照ああしてヒープを指している必要がありますか?
また、ここでは、考えて私を得た答え偉大な神が、エラーがある場合書かれて、私たちに知らせてくださいの自分の理解を置きます。
このホワイトペーパーのテストコード:
static void Main()
{
int a = 1;
object b = a;
object c = b;
c = 2;
}
結果を参照してくださいIldasm.exeをを使用します。
メモを追加:
自分自身のために私はILコードの考えを理解してください。
1、Idc.i4.1、 stloc.0 ==> int a = 1;
2、Idloc.0、 box[mscorlib]System.Int32、 stloc.1 ==> object b = a;(b指向在堆栈上新建对象值为1,与a无任何联系)
3、Idloc.1、 stloc.2 ==> object c = b;
4、Idc.i4.2、 box[mscorlib]System.Int32、 stloc.2 ==> c = 2;(c指向堆栈上新建对象值为2)