using System; 
class Program 

static void Main(string[] args) 

object e1 = 1; 
object e2 = 1; e1 = e2; e2 = 2; Console.WriteLine(e1); 
Console.WriteLine(e2); 
} } 
其结果为:e1=1,e2=2按照常理:e1,e2都是引用类型,e1,e2都指向同一个对象,e2变成2,e1也改变成2谁能给个合理的解释?

解决方案 »

  1.   

    boxing unboxing
    装箱与拆箱
      

  2.   

    object e1 = 1; 
    object e2 = 1; //这两个1存储在不同的位置e1 = e2; //仅仅把e2的值赋给e1e2 = 2; Console.WriteLine(e1); 
    Console.WriteLine(e2);
      

  3.   

    object e1 = 1; //装箱(生成一个新对象A,并把该对象引用赋予e1)
    object e2 = 1; //装箱(生成一个新对象B,并把该对象引用赋予e2)e1 = e2;       //e1 e2 指向同一个对象B ,A将被GC回收e2 = 2;        //装箱(生成一个新对象C,并把该对象引用赋予e2)这时e1 指向原来B 
        e2 指向原来C
      

  4.   

    Jim3分析的透彻,真的犹如醍醐灌顶!
      

  5.   

    下面的代码可以辅助大家理解:using System;
    class Program 

    static void Main(string[] args) 

    A a1=new A();
    A a2=new A(); a1 = a2; a2.a = 20; a1 = new A(); Console.WriteLine(a1.a); 
    Console.WriteLine(a2.a); 
    }  class A
    {
    public int a=10;
    }} 
      

  6.   

    回复人: Jim3(Jim) ( ) 信誉:100   Good~