我想问一下这个例子是否正确,所以如果您将引用类型分配给引用类型,如下所示:
ClassName p1 = new ClassName();
ClassName p2 = p1;因此,如果我谈到第一行,当您创建引用变量(类)时,一次会发生两件事。首先,引用类型(类)对象是在堆上创建的(在内存中的某个地址上);其次,对堆上的这个已创建对象的引用(创建对象的地址)在堆栈上创建,并存储在变量中。
对于第二行,我知道从p1引用将复制到p2,因此p2和p1将有相同的引用指向内存中的同一个对象(堆)。但我真的想知道背后发生了什么。我也知道,存储在引用变量中的引用是在堆栈上分配的。
所以,如果我说,在将引用类型赋值给引用类型之后,实际发生了什么。因为引用(内存中的对象的“地址”)实际上类似于“值类型”(我不是指堆中的对象),所以将引用类型赋值给引用类型,我可以理解为通过值分配引用(地址)?
谢谢你的回答。
发布于 2017-05-01 20:53:09
尽管有许多不同之处;引用在概念上与内存地址相似;变量只存储地址,因此将地址分配给另一个变量只允许它访问相同的内存实例。
引用类型内存存储在堆上,而不是堆栈上,但是地址‘指针’(变量)存储在堆栈上。当它们超出所有堆栈作用域和线程存储范围时,堆内存将被释放。
托管内存系统与C中的地址/指针概念之间有许多细微的差别--但在您的问题范围内,您似乎有了正确的理解。
https://stackoverflow.com/questions/43726279
复制相似问题