You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在类中使用struct时值不会发生变化?

关于Counter结构体修改不生效的原因分析

嘿,我刚好看到这个问题,来聊聊我的分析——你猜的完全没错,核心就是**装箱(Boxing)和拆箱(Unboxing)**的机制在起作用!

咱们一步步拆解:

  • 首先看这行代码:public readonly object counter = new Counter();
    这里Counter是值类型结构体,把它赋值给object类型变量时,会触发装箱操作:系统会在堆上创建一个对象,把Counter的实例数据拷贝进去,然后counter这个引用就指向堆上的这个装箱对象。

  • 再看拆箱操作:((Counter)riddle.counter)
    每次执行这个强制转换时,都会触发拆箱——注意,拆箱不是直接返回堆上的那个结构体实例,而是把堆上装箱对象里的Counter数据拷贝一份,生成一个新的Counter值类型实例放在栈上。

这就解释了为什么A行的操作不会影响B行:
A行修改的是拆箱后得到的那个栈上临时Counter实例,而B行再次拆箱时,又会从堆上的原装箱对象里拷贝一份全新的Counter实例。两次拆箱得到的是完全独立的两个实例,互相没有关联,自然A行的修改不会体现在B行里。

内容的提问来源于stack exchange,提问作者Netsphere Wu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:41