我正在阅读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”的引用(studentName
和students[0]
)。将null
分配给studentName之后,students[0]
仍引用“Peter Smith”