//=================================
object o1, o2;
int i=100;
o1=i; // 装箱,转换成引用类型
o2=o1; // 将o1的值赋给o2
i=200; // 修改变量i的值
Console.WriteLine(object.ReferenceEquals(o1,o2));//true
o1=i; // 重新装箱
Console.WriteLine(object.ReferenceEquals(o1,o2));//false
Console.Write(o2); // 将o2的值输出
//=================================
object o1, o2;
int i=100;
o1=i; // 装箱,转换成引用类型
o2=o1; // 将o1的值赋给o2
i=200; // 修改变量i的值
Console.WriteLine(object.ReferenceEquals(o1,o2));//true
o1=i; // 重新装箱
Console.WriteLine(object.ReferenceEquals(o1,o2));//false
Console.Write(o2); // 将o2的值输出
//=================================
这行code,导致了o1的引用发生变化
int i = 1000;
o1 = i;
o2 = i;
o3 = i;
Console.WriteLine(object.ReferenceEquals(o1,o2));
Console.WriteLine(object.ReferenceEquals(o1,o3));
Console.WriteLine(object.ReferenceEquals(o2,o3));这个上面的结果全部是false;
只要发生一次装相操作,都会返回一个新的引用,跟上次的装箱操作没有关系
>>>Int32是引用类型?
关于string类型
System.ValueType
System.Int32上述中的Int32特指int被装箱后的System.Int32结构。因为int是不可能作为结构存在内存中的吧。
{
public int i;
public override string ToString()
{
return i.ToString();
}
}Test t = new Test();
t.i = 100;
Object o1 = t;
Object o2 = o1;
Test t2 = (Test)o1;
t2.i = 200;Console.Writeline(o2);object o1 = t
分析如下:
//=================================
object o1, o2;
int i=100;
o1=i; // 装箱,转换成引用类型,
o2=o1; // 将o1的值赋给o2,o1和o2指向同一块内存,这里假设内存为k1
i=200; // 修改变量i的值
o1=i; // 重新装箱,分配新的内存k2,这里o1指向k2,而o2还是指向k1.
Console.Write(o2); // 将o2的值输出所以结果不同.