关于Java对象可达性测验的疑问:clutch对象是否仍可达?
Java对象可达性问题解答
首先明确核心概念:Java中的变量只是对象的引用,对象本身存储在堆内存中。把变量设为null,只是切断了该变量与对应对象的关联,但只要还有其他引用指向这个对象,它就仍然是可达的,不会被垃圾回收器回收。
我们逐行拆解代码执行后的列表状态与对象可达性:
- 第3行:
clutch变量指向car内部的Clutch对象 - 第6行:将这个
Clutch对象的引用添加到rl列表中,此时rl持有该对象的有效引用 - 第8行:把
clutch变量设为null,仅切断了clutch变量与Clutch对象的关联,但rl列表里的引用依然指向该对象,所以**Clutch对象仍然处于可达状态**
再看第12行执行后的列表状态:
- 第11行
rl.remove(0)移除了列表中的Car对象,此时列表变为[Clutch对象, null] - 第12行
rl.remove(1)移除了索引1的null元素,最终列表仅剩[Clutch对象],该对象通过rl列表的引用保持可达
所以测验中的表述是正确的,clutch变量被设为null不会影响列表中持有的对象引用,对象依然可达。
内容的提问来源于stack exchange,提问作者kyy8080
相关产品推荐
相关产品推荐

