我想问一下我这个例子是否正确,所以如果你将引用类型分配给引用类型,例如:
ClassName p1 = new ClassName();
ClassName p2 = p1;
因此,如果我要谈论第一行,当您创建引用变量(类)时,会同时发生两件事。首先,在 HEAP 上(在内存中的某个地址上)创建引用类型(类)的对象,然后在 HEAP 上创建对这个创建对象的引用(创建对象位置的地址),在堆栈上创建并存储在多变的。
对于第二行,我知道,从 p1 引用将被复制到 p2,因此 p2 和 p1 将具有指向内存(堆)中相同对象的相同引用。但我真的很想知道这背后发生了什么。我也知道,存储在引用变量中的引用是在堆栈上分配的。
因此,如果我说将引用类型分配给引用类型背后真正发生了什么。会不会是:因为引用(内存中对象的“地址”)实际上就像“值类型”(我不是指堆上的对象),所以将引用类型分配给引用类型,我可以理解为分配引用(地址)按值?
谢谢您的回答。
虽然有很多不同;引用在概念上类似于内存地址;变量只存储地址,因此将地址分配给另一个变量只是允许它访问相同的内存实例。
引用类型内存存储在堆上,而不是堆栈上,但地址“指针”(变量)存储在堆栈上。当它们超出所有堆栈范围和线程存储范围时,堆内存被释放。
托管内存系统与 C 中的地址/指针概念之间存在许多微妙之处和差异 - 但在您的问题范围内,您似乎有正确的理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句