为什么此String不符合垃圾回收的条件?

get*_*uga 7 java string

以下代码创建一个数组和一个字符串对象.代码执行后,对这些对象有多少引用?对象是否有资格进行垃圾回收?

...
String[] students = new String[10];
String studentName = "Peter Parker";
students[0] = studentName;
studentName = null;
...
Run Code Online (Sandbox Code Playgroud)

我的回答是studentName有资格进行垃圾收集.但是给出的答案都不符合条件.我认为学生[0]指的是字符串"Peter Parker",studentName也是这样.现在studentName指的是null,学生[0]仍然指的是"Peter Parker"(我通过打印出来检查了这一点).给出的解释是学生[0]仍然指的是studentName所以studentName也没有资格进行垃圾收集.但我不理解因为studentName现在指的是null而学生[0]指的是"Peter Parker".我的理解是错的吗?

Era*_*ran 6

之前studentName = null;被执行,studentName并且students[0]都持有相同的参考String对象(其值"Peter Parker").当你分配nullstudentName,students[0]仍然引用那个对象,所以它不能被垃圾收集.

Java不会垃圾收集引用变量,一旦没有对这些变量的引用,它就会收集这些变量引用的对象.