同时在互联网上阅读我了解到静态变量总是具有相同的内存地址。因此,在编译程序时,编译器将决定分配给静态变量的内存地址。阅读让我想到当你这样做时会发生什么:
class Foo {}
class Program
{
public static Foo someStaticVar;
static void Main(string[] args)
{
Foo localVariable = new Foo();
int x = 4;
someStaticVar = localVariable; // is someStaticVariable still will have the same address?
}
// variable x will be pushed of the stack
// localVariable will be pushed of the stack
// what happens then with someStatic var?
}
我还了解到,在方法中声明变量时,它们将在创建时被推入堆栈,并在方法返回时弹出堆栈。如果这一切都是真的,那么 someStaticVar 应该消失,但它不会。
我确信我一定理解错了。或者,也许在线 someStaticVar = localVariable;
正在执行该对象的深拷贝,但我对此表示怀疑,因为互联网上有很多关于如何对对象进行深拷贝的问题,它们与这种方法有很大不同。