【发布时间】:2017-04-06 20:09:30
【问题描述】:
我在 Daniel Liang 关于 Java 编程的最新著作(第 386 页,第 10 版)中看到了以下文字:
下面的代码会改变字符串的内容吗?
String s = "Java"; s = "HTML";答案是否定的。 .... 赋值后第一个String对象仍然存在,但是不能再访问了,因为变量s现在指向了新的对象,如图10.15所示。
根据上面的文字,作者的观点似乎是字符串对象“Java”没有被垃圾回收,即使它不再被引用。我知道 Java 中实习字符串的存储位置发生了一些变化。请记住,上面的书是关于 Java SE 8 的。
但根据 Java 垃圾收集器,未使用的对象(不再引用的对象)会自动被垃圾收集。
那么哪种情况是 Java SE 8 的实际情况?
【问题讨论】:
-
我不认为作者声称字符串不能被 GC'ed;该陈述在非正式意义上是正确的,人们可能会看到它也适用于其他(非字符串)类型。
-
类作为一个整体,在其代码中,仍然带有对该字符串字面量的引用。
标签: java string garbage-collection