正在回答
4回答
同学你好,理解的有些误差,。具体可以参考如下解析:
1、b={}表示b引用了一个空对象,b.arr =a 表示在这个空对象上添加了一个属性,名为arr,引用了变量a。 所以此时[4]的引用次数增加一次。
2、将b=null置为空之后,b之前引用的对象就不再被引用了,会被垃圾回收机制回收,这个对象都被回收了,那么这个对象上的arr属性也就不再会引用a了,所以[4]的应用次数就会减少一次。
3、本题代码与视频中的区别就是,b = null 之后,b之前引用的对象不再被引用,会被垃圾回收机制回收,视频中xm = null 之后,清除了xm的引用,但是xm之前引用的对象,被xh.husband属性继续引用,不会被垃圾回收机制回收,所以这个对象的引用继续存在。
祝学习愉快~
好帮手慕夭夭
2020-10-29 18:28:20
同学你好,参考如下理解:
本题代码解析:代码中,只有b和b的属性引用过a,但是a没有引用过b,所以没有形成循环引用。
它与课程中的区别在于,课程中是两个对象各自的属性相互引用了对方。xm的属性wife引用了xh,xh的属性husband引用了xm。此时将xm和xh分别置为null,以前一个xm对象为例,它的引用计数将减1。若要满足垃圾回收的条件,需要清除xh中的属性(husband)对它的引用,而要清除掉这个引用的前提条件是xh引用的对象被回收,可是该对象的引用计数也为1,因为xm.wife指向了它......相互引用也就进入一种死循环的状态,无法清零。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星