请问一下老师,关于视频中的循环引用案例
来源:5-3 选择练习
Carol246
2019-07-04 18:19:48
请问一下老师,视频中的循环引用案例,第一个 xm=null; 减少的是哪个 {} 的引用次数?为什么此时不是两个 {} 的引用次数都减一?这样在第二个 xh=null; 时再都减一,两个 {} 的引用次数就都为 0 了?
3回答
你好,对象是引用类型,变量在栈内存中,值在堆内存中,看下面图可能好理解一些:
xm和xn局部变量解除引用只是xm和xn不再指向堆内存中的值,但是在堆内存中还是在相互引用的。
自己再理解下。
好帮手慕星星
2019-07-05
你好,在练习中最后b=null,b本身没有引用,是b的arr属性进行引用了,所以将b置空之后,减少的次数是属性arr的引用。
而在视频中,xm以及xm中的wife属性都有引用,xm被置空之后,减少的只是xm的引用,属性wife的引用并没有减少。
自己再理解下,祝学习愉快!
好帮手慕星星
2019-07-04
你好,同学理解的可能有些问题,可以参考下面的解释:
xm和xn是fn函数中的局部变量,所以fn调用之后,xm和xn就解除了引用,也就是xm=null,和xn=null。
但是xm和xn对象中的wife和husband属性也引用了xh和xm,所以调用fn之后只解除了一次引用,并不能完全解除引用,这就是相互引用出现的问题。
自己再理解下,祝学习愉快!
相似问题