object赋值给值类型为什么会装箱?
因为object是引用类型,而值类型存储在栈上,两者内存布局不同。将值类型赋给object时,clr会在堆上分配一块内存,把值类型的字段复制进去,并返回一个指向该内存的引用。

using System;
class Program
{
static void Main()
{
int i = 42;
object o = i; // 触发装箱
Console.WriteLine(o.GetType());
}
}
运行结果:System.Int32。这里i是int,赋值给o后,o持有的是堆上的副本。
装箱后的对象能修改原值吗?
不能。装箱创建的是堆上的独立副本,修改object引用的内容不会影响原来的值类型变量。

using System;
class Program
{
static void Main()
{
int i = 42;
object o = i;
// 无法直接修改o的值,因为object没有Int32的成员
// 但可以通过反射或拆箱验证独立性
Console.WriteLine(i); // 输出42
}
}
由于object不保留原始类型信息用于修改,任何对o的操作都是针对堆对象的。原变量i保持不变。
装箱是否影响性能?
是的。每次装箱都涉及堆分配和内存拷贝,频繁装箱会导致GC压力增大和性能下降。










