装箱与拆箱问题的疑惑

圣域理想 2021-01-13 03:00:13
有如下一段代码


int i1 = 2;
object o1 = i1;
object o2 = o1;

object.ReferenceEquals(o1,o2).Dump(); // true

o1 = 5;

o1.Dump("o1"); // return 5
o2.Dump("o2"); // return 2


上述代码中,i1为int值类型,随后赋值给object o1 既为装箱过程并成为引用类型, 然后o1又赋值给o2(根据引用类型特点,实际值应该存放在堆Heap中,而栈Stack存放引用地址,其结果应该一致),请问为什么对 o1 重新赋值后为什么并没有影响o2的值?
...全文
1165 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2021-01-17
  • 打赏
  • 举报
回复
对象引用基本类型,需要装箱
圣殿骑士18 2021-01-16
  • 打赏
  • 举报
回复
这跟装箱拆箱没关系。用基本类型写的案例,也是这个结果。所以装箱拆箱要不一样?当然不应该不一样。
shawn xia 2021-01-15
  • 打赏
  • 举报
回复
GENDOKE 2021-01-15
  • 打赏
  • 举报
回复
首先,你让两个引用指向了同一个地址的数据。后来仅仅是改变了o1的指向,但o2还是指向了原来的2数据
gs0038 2021-01-13
  • 打赏
  • 举报
回复

o1 = 5;//你这是重新装箱 

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧