首页 > 解决方案 > 赋值后引用对象不为空,怎么可能?

问题描述

对象 a 为空,但我看到对象 b 在运行时不为空。为什么在这种情况下对象 b 不为空?

List<int> a = new List<int>();
List<int> b = a;
a = null;

标签: c#.netnullpass-by-referenceassignment-operator

解决方案


通过这样做,List<int> a = new List<int>();您创建了一个位于堆中的对象和一个对该对象的引用(变量a)。

通过这样做,您可以为堆中的同一对象List<int> b = a;再创建一个引用(变量)。b

所以你有两个引用和一个对象。

通过这样做,a = null;您正在杀死一个参考。

那么还剩下什么?引用b堆中的对象。

如果你要杀死b,垃圾收集器将从堆中收集对象,因为它没有留下任何引用。


推荐阅读