我正在阅读oracle提供的在线教程。其中一项练习的问题如下:


以下代码创建一个数组和一个字符串对象。代码执行后,存在多少对这些对象的引用?这两个对象都可以进行垃圾收集吗?

...
String[] students = new String[10];
String studentName = "Peter Smith";
students[0] = studentName;
studentName = null;
...

答案:有一个对students数组的引用,而该数组有一个对字符串Peter Smith的引用。这两个对象都没有资格进行垃圾回收。

(http://docs.oracle.com/javase/tutorial/java/javaOO/QandE/objects-answers.html)

当然,最后一行意味着studentName可以使用GC?确实很困惑,我认为这意味着我还没有理解“空”的本质,也没有正确地引用对象,这就是我要问的原因。

最佳答案

在将null分配给studentName之前,有两个对“Peter Smith”的引用(studentNamestudents[0])。将null分配给studentName之后,students[0]仍引用“Peter Smith”

10-06 08:17