这个问题涉及到装箱和拆箱的问题; 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
最好显示转换后在去比较。 否则总是爱出错。 int x; object t ; t = x; int temp = (int)t ;
这里的t实际是int即值类型,object s=t;这时s也是值类型,所以Consoe.WriteLine(t==s);
显示
false
a=1;b=1;
Console.WriteLine(a==b);这样A,B就是引用类型,你可以试试
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了。
然而,在C#中实现处理对象的时候又分值类型和引用类型;
如果:object A;此时你可以认为还不知道A是什么类型,
但当:A = 3;时,相当于A = new Int(3);一样,
相当于告诉了A是值类型,
而且这种性质是具有传递性的,
即object B = A;表明B也是值类型的,其相当于
object B = new Int(3);
...
a=1;b=1;
Console.WriteLine(a==b);
这又成了引用比较了,怪了
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
int x;
object t ;
t = x;
int temp = (int)t ;
a=1;b=1;
Console.WriteLine(a==b);------------------
怎么就成了引用类型呢?不还是值类型吗?只不过他俩的值相等而已.