c# - 赋值后引用对象不为空,怎么可能?
问题描述
对象 a 为空,但我看到对象 b 在运行时不为空。为什么在这种情况下对象 b 不为空?
List<int> a = new List<int>();
List<int> b = a;
a = null;
解决方案
通过这样做,List<int> a = new List<int>();
您创建了一个位于堆中的对象和一个对该对象的引用(变量a
)。
通过这样做,您可以为堆中的同一对象List<int> b = a;
再创建一个引用(变量)。b
所以你有两个引用和一个对象。
通过这样做,a = null;
您正在杀死一个参考。
那么还剩下什么?引用b
堆中的对象。
如果你要杀死b
,垃圾收集器将从堆中收集对象,因为它没有留下任何引用。
推荐阅读
- java - Java string.replace 不能作为 string.replaceAll
- flutter - 在没有谷歌服务的华为 p40 lite 上编译我的应用程序时出错
- laravel - 使用 medialibrary spatie 运行测试后如何删除图像上传?
- javascript - 基于布尔值重新排列现有选项
- delphi - Delphi FMX:保存和加载容器子项
- c - 如何打印在while循环期间插入的数据,在while循环之后?
- c++ - 以 32 位和 64 位编译 ATL DLL
- php - 在 laravel 中扩展基本控制器并在路由器中使用的扩展控制器
- xml - 在同一节点上匹配具有不同配置的模板
- javascript - 子弹跟随鼠标位置