object t=3;
object s=t;
t=6;
Consoe.WriteLine(t==s);
显示
false
为什么 s和t的值不一起变

解决方案 »

  1.   

    object t=3;
    这里的t实际是int即值类型,object s=t;这时s也是值类型,所以Consoe.WriteLine(t==s);
    显示
    false
      

  2.   

    s=t只是把t的值传给了s,而你下面又给了t新值6,t和s是2个不同的变量。就好像你把软盘里的一个文件复制到了硬盘里,你在修改软盘里的文件时,硬盘里的那个文件不会跟着一起变。
      

  3.   

    object a,b;
    a=1;b=1;
    Console.WriteLine(a==b);这样A,B就是引用类型,你可以试试
      

  4.   

    object t=3; 这时t里面其实是System.Int32类型.而Int32属于值类型,他赋值时只赋予值,不传递引用.
      

  5.   

    这个应该要考虑CLR内部散列表了,此时,上面的这个散列表的键为int,值为指向托管堆中的int的对象引用。所以
    object t=3;
    object s=t;
    Console.WriteLine(t==s);
    此时输出应该是true。但当t值改变,散列表中键也改变,所以
    object t=3;
    object s=t;
    t=6;
    Console.WriteLine(t==s);
    输出就是false了。
      

  6.   

    即使是楼上那样,也不会相等,因为object的==运算符默认是比较引用。
      

  7.   

    object是C#中所有类型的基类,
    然而,在C#中实现处理对象的时候又分值类型和引用类型;
    如果:object A;此时你可以认为还不知道A是什么类型,
    但当:A = 3;时,相当于A = new Int(3);一样,
    相当于告诉了A是值类型,
    而且这种性质是具有传递性的,
    即object B = A;表明B也是值类型的,其相当于
    object B = new Int(3);
    ...
      

  8.   

    lljfl(Dos) 说得对object a,b;
    a=1;b=1;
    Console.WriteLine(a==b);
    这又成了引用比较了,怪了
      

  9.   

    这个问题涉及到装箱和拆箱的问题;
    object类型是引用类型,即无论你给他赋的是什么值,要执行装箱操作,形成引用类型;
    当从object中取值时执行拆箱操作,这时就要使用显示的类型转换才行。
    所以问题可以解了,
    当给t=3时,相当于将t指向了内存中存储3的区域,
    然后执行s = t,相当于将s也指向了内存中存储3的区域,
    但是,后面又作了一步,t = 6;
    相当于把t重新指向了内存中存储6的区域,它与存储3的区域是不同的,
    因为无论是t=6 还是 t = 3都相当于 t = new Int32(3) 或 t = new Int32(6);
    所以最后t 和 s 分别指向了不同的内存区域,作引用比较时,自然是false
      

  10.   

    最好显示转换后在去比较。 否则总是爱出错。 
    int x; 
    object t ; 
    t = x; 
    int temp = (int)t ;
      

  11.   

    object a,b;
    a=1;b=1;
    Console.WriteLine(a==b);------------------
    怎么就成了引用类型呢?不还是值类型吗?只不过他俩的值相等而已.