C# 装箱 拆箱 问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 22:43:23
int i = 123;
object o = i; // 装箱
i = 456; //改变i的内容
Console.WriteLine("值类型的值为 {0}", i);
Console.WriteLine("引用类型的值为 {0}", o);
为什么结果 引用类型的值为 123 ?这点不太明白.望高人指点详解

看了2楼的解释我疑惑:
int i=123创建了一个变量i,并将其值123放在栈中;object o=i,它将i的值赋给了引用类型O,并将值123放在堆中,然后增加一个栈引用,即O指向堆中的123。这个值类型包装为引用类型称为装箱;然后int i=456,在栈中重新给i赋值,并没有改变引用类型O指向堆中的值;
通常我们用类创建一个实例,比如 Class myClass=new Class();myClass存放在 栈中而它的字段都会放在托管堆中,由CLR来管理;

1.你把i赋给o,那么o=123;
2.然后给i重新赋值456,因为i是值类型,没有影响到o.
所以
i输出为456
o输出为123
这是我的一点想法,如果有错,请更正说明,谢谢

这个不是装箱和拆箱的问题是引用类型和值类型的问题

你没有给o负值 当然还是123了 你只改变了i的值

我明白你的困惑 你是想o是引用类型 你把i的地址指向了o 如果把i的值改变了
o的值也应该跟着变 对不对
可是你别忘记i是值类型 当你改变它的值的时候 其实系统给它另开了一个栈 放新的值 而o指向的是旧的地址 所以值还是123
想让它变值 就要再给它重新指向新地址 就是重新再负下值

可以参考值类型和引用类型的区别

看下赋值顺序